3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VB.NET WebFormで自動テストやってみた

Posted at

自動テスト文化のあった部署からない部署に異動したので、さてここにも新しい文化を根付かせるかと意気込んでいたのですが、なかなかうまくいかなかったのでメモとして投稿します。

開発環境

異動後のプロジェクトは以下の開発環境で開発をしていました。

  • Windows10 Pro
  • VB.NET Framework 4.8
  • ASP.NET Webアプリケーション
  • Microsoft Visual Studio Ultimate 2013

本当はGitではなくvssを使っていたりとびっくり仰天な状況だったのですが、それはまた別の話。

方針

何が難しいかというと、今回の対象はASP.NET Webアプリケーションだということです。単体テストプロジェクトを追加しても、Webアプリケーションの各ページの.aspx.vbを対象にすることができません。
image.png
じゃあどうするかというと、.aspxの各ページをdll化してやります。

導入手順

苦労の末、先駆者様の記事を見つけて安心していたのですが、10年前の記事の上に、

ASP.NET WebFormはUnitTestにすばらしく向いていないため、

といきなり書いてあったので「やめちゃおっかな……」とか心が折れかけてました。

テスト対象のコードをプリコンパイルする

今回これは既存プロジェクトに存在する.aspx.vbを対象としました。これをaspnet_compiler.exeを使ってプリコンパイルしてdllを生成します。在り処はC:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exeでした。.NETには詳しくないので、環境に合わせて探してください。

それを使って、コマンドプロンプトから以下のコマンドを叩きます(今回は10~20秒程度掛かりました)。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe
-p C:\~~(Webサイトのあるパス) -v -f C:\~~(出力先フォルダのパス) -fixednames

無題.png

上の画像では途中で警告が表示されていますが、問題なく完了しました。各ページのコンパイル後のdll名が毎回変わって面倒なので、-fixednamesオプションをつけて同じ名前で出力させるようにします。-vオプションについてはリサーチ不足で何物なのか不明ですが、必要です。
無題.png
完了後、(出力先フォルダのパス)\bin内にたくさんファイルが出力されていると思いますが、各ページの.dllがApp_Web_xxx.aspx.hogehoge.dllという名前のファイルを使います。

テストコードプロジェクトを準備する

同じソリューション内にテストコード用のプロジェクトを追加してください。先述したとおり、単体テストプロジェクトは使えませんので、テストコードは通常のクラスライブラリに書きます。
画像1.png

参照に、先程出力したdllを追加してください。
無題.png

NUnitをインストールする

NUnitを使ってテストしたいので、NuGetパッケージマネージャーから追加していくのですが、パッケージの情報が取得できない場合があるので、先にパッケージマネージャーコンソールを起動しておきます。visual studioのメニュー>ツール>NuGetパッケージマネージャー>パッケージマネージャーコンソールで起動します。

画像2.png

コンソールが起動していればOKです!
画像3.png

対象プロジェクトにNUnitおよびNUnit3 Test Adapterをインストールします。
対象のプロジェクトを右クリック>NuGetパッケージの管理…で管理画面が表示されます。
画像5.png
「nunit」と検索して出てくる「NUnit」と「NUnit3 Test Adapter」をそれぞれインストールしてください。
画像6.png

テストコードを書く

NUnit.Frameworkとテストしたい画面をimportsして、あとは普段どおりテストコードを書けばOKです。テストコードの書き方はググればわかりますのでそちらを参照されたし。

Imports NUnit.Framework
Imports hogepage(テスト対象にしたい画面)

Namespace hogehogenamespace
    <TestFixture>
    Public Class SampleTest

        <TestCase>
        Public Sub TestSampleTestCode()
            Dim page = New Global.hogepage()

            Assert.AreEqual(0, page.somefunction())

        End Sub

    End Class

End Namespace

今後

ひとまずテストコードが書けることがわかったので、これをどうにかして運用できないか考えます。既存のプロジェクトを使って試運転したのもあって、プリコンパイルに時間が掛かったのですが、手順がえらい面倒なのでテスト駆動開発にはあまり向いてないかもしれません……。

3
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?