アプリ版:「スタンプのみでお礼する」機能のリリースについて

App_Code配下のクラスをNUnitでテストする方法はないのでしょうか?

■環境:
 ASP.NET 2.0
 VB.NET(.NET Framework 2.0)
 NUnit2.4.8

■フォルダ構成(※抜粋):
 (ルート)
   App_Code
     Dao
     Service
     Util
     (省略)
   WebForm
     (aspxファイル郡)

通常App_Code配下にクラスはおかず、
別プロジェクトに切り出すものなのでしょうか。

A 回答 (3件)

NUnitは私自身使わないので(.NET標準で搭載されている単体テスト機能を使っちゃうので)、的をはずしているかもしれませんが、


もし、App_Code配下のコードをテストしたい場合は、
恐らくASP.NETアプリケーションをプリコンパイルしないと
NUnitでテストできないのではないかと思います。

参考サイト(英語)
http://bytes.com/forum/thread454522.html

aspnet_compiler.exe を使って、対象のWebプロジェクトをプリコンパイルし、その後、App_Code用に出来たプリコンパイル用DLLを
Webプロジェクトに参照設定します。
後はWeb Project内でテスト用のコード(ドライバコード)を
書いて参照設定したApp_Codeのメソッドを呼び出してあげるしか
方法がないように思います。

プリコンパイル方法&MSBuildについては
http://msdn.microsoft.com/ja-jp/library/cc671425 …
を参照してください。
他に良い方法があればいいのですが、私が思いつくのはそれぐらいです。

ちなみに使っているVisual Studio のバージョンとエディションは
何でしょうか?差し支えなかったら、今後の情報共有のためにも
ご教授下さい。宜しくお願いします。

参考URL:http://bytes.com/forum/thread454522.html
    • good
    • 0
この回答へのお礼

早速このような細かいご回答をくださり大変ありがとうございます。
VSのバージョンは次のとおりです。
Visual Studio 2005 Professional Edition
※よって、VSTSは使用したことがありません>_<

aspnet_compiler.exeは私も本番環境へのデプロイに使用しています。
aspnet_compilerはプリコンパイルするのに現在1分強を要します。
一方、App_Code配下を別プロジェクトとした場合
そのプロジェクトをビルドするのは5秒ほどで終わります。(現在のクラス数:654)
したがって、開発速度を保つためには
別プロジェクトにした方がよさそうに思いました。

しかし、そのためにはリソースファイルの共有という課題があります。
  (現状)
App_Code
Exception
XxxxException.vb ---> App_GlobalResourcesの.resxファイルを参照
WebForm
.aspx.vb ---> 同じくApp_GlobalResourcesの.resxファイルを参照

  App_Code配下には独自Exceptionクラスがあり、
  これらのエラーメッセージはApp_GlobalResources配下の
  .resxファイルを参照して取得していました。
 
  一方WebFormでも検証コントロールのエラーメッセージのために
  同じ.resxファイルを参照しています。

  App_Code配下を別プロジェクトにすることで、
  WebFormからもその新プロジェクトのリソースファイルを
  参照したいと思うのですが、そのようなことは可能なのでしょうか。

  それともリソースファイルを別々にもち、
  Exceptionクラスが使用するメッセージを
  新プロジェクトのリソースファイルの方に移すしかないでしょうか。

まだ調べてないですが、どちらからも(=ExceptionからもWebFormからも)
  参照されているメッセージについては重複を黙認するしかないでしょうか。
  (=App_GlobalResourcesの.resxファイルと
  新プロジェクトのリソースファイルに同じメッセージをもつ)

話がそれてしまいますが、いま一度回答頂けますと幸いです。

お礼日時:2008/10/21 10:42

>ビルドが完成するまで3分15秒ほどかかります



確かに重いですね。
ちなみに、Visual Studio 2005にSP1はインストールされていますか?
SP1を入れてだいぶスピードがマシになったことがあるので、
できればSP1をインストールして、IDE環境をスピードアップさせたいですね。

後、ビルドスピードに関しては、
Project構成によっても異なってくるので何ともいえないところでは
ありますが、毎回ソリューションのビルドだと重くてつらいと思うので
ある程度、ビルドオプション(ビルドモード)を
何種類か用意することで少しは短縮できると思います。
恐らく、デフォルトでは、DebugモードかReleaseモードの
2種類しかないと思うので、例えば、下記のようなモードの
ビルドオプションを用意しておくといいかもしれませんよ。

・Web ProjectだけのDebugビルドモード
・Web ProjectだけのReleaseビルドモード
・Web Project + 関連のあるProjectだけのDebugビルドモード
・Web Project + 関連のあるProjectだけのReleaseビルドモード
・Web Projectと関連のないクラスライブラリProjectだけをビルドするビルドモード

など・・・
VS.NET 2005 Professional版だと、
[ビルド]メニュー→[構成マネージャー]で
いろんなパターンのビルドモードを作れますので、一度試してみてください。

しかし、ASP.NETやVS.NETで悩まれるところはやはり皆さん同じだなと
実感しました。どうかがんばって下さい。
    • good
    • 0
この回答へのお礼

たびたび回答ありがとうございます。

SP1は先日そのような期待を胸に適用しました。
しかし、ビルドスピードは
体感レベルでは違いがわかりませんでした。
なので、スピードアップしたとの
kero-mioさんのお話に驚かされました。

ビルドオプションについてはノータッチです。
いまいち理解していません。勉強してみます。
情報提供ありがとうございます。
ためしにWebだけDebugビルドするようにしてみましたが
これでは効果がなかったようです。

>しかし、ASP.NETやVS.NETで悩まれるところはやはり皆さん同じだなと実感しました。

やはりそうなのですね。みなさん悩んでおられる。
Seasarのようにさくさく開発したいものです。
ありがとうございました。

お礼日時:2008/10/23 11:10

補足情報ありがとうございます。



>そのプロジェクトをビルドするのは5秒ほどで終わります。(現在のクラス数:654)
>したがって、開発速度を保つためには
>別プロジェクトにした方がよさそうに思いました。

そうですね。これは別プロジェクトにした方が正解だと私も思います。
クラスファイル数が増えるとVS.NET2005のIDEが重くて話にならないので
できるだけ別Projectにした方がいいです。
ただし、あまりApp_Codeで定義していたクラスが多数あるからと
いって、複数のProjectに分割しすぎないで下さい。
ソリューション内に多数のProjectファイルがあるとVS.NET2005の
IDEが重くて話にならないです。そこだけ配慮して頂けたらと思います。

>(現状)
>App_Code
>Exception
>XxxxException.vb ---> App_GlobalResourcesの.resxファイルを参照
>WebForm
>.aspx.vb ---> 同じくApp_GlobalResourcesの.resxファイルを参照

まず、resxは、カスタムツール + 名前空間を使って、バッティング
しないように配慮する必要がありますね。
また、resxを元にした、Resourcesファイルを作り、
作ったResoucesファイルを格納するプロジェクトを1つ用意します。
すると、App_CodeをProjectにしたクラスからも該当リソースに
アクセスできますよ!

若干高度なやり方ですが、こんな感じです。

・リソース定義は今までどおり、App_GlobalResourcesにある
 resxで定義する

・Resourcesファイルを格納したプロジェクトファイルの
 ビルドオプションで、App_GlobalResourcesにある
 最新のresxファイルを取得。Resourcesファイルを作る
 リソース ファイル ジェネレータ (Resgen.exe)コマンドを動かすよう、
 「ビルド実行時」の設定オプションで設定しておきます。
 (ビルド実行時の設定オプションは、プロジェクトファイルの
 プロパティを見てもらえればどっかにあります。)

こうすると、aspxは、App_GlobalResourcesにあるresxを参照し、
App_Codeをプロジェクト化したクラスは、Resourcesファイルが
格納されているProjectファイルを参照することでリソース値を
取得する構成をとることができます。

このリソース ファイル ジェネレータ (Resgen.exe)を
ビルド時に実行する時のサンプルコマンドラインを作ったことが
あるんですが、今手元にサンプルがないので、サンプルを提示
できなくてすいません。

ただ、リソース ファイル ジェネレータ (Resgen.exe)は、
http://msdn.microsoft.com/ja-jp/library/ccec7sz1 …
に細かい使い方掲載されていますので、宜しければ検討して
頂けると幸いです。宜しくお願いします。

参考URL:http://msdn.microsoft.com/ja-jp/library/ccec7sz1 …
    • good
    • 0
この回答へのお礼

たびたび非常に丁寧なご説明ありがとうございます。
まだ試せていませんが、おっしゃってることは理解できました。
とても助かりました。ありがとうございました。

VSはすでに大変重い状況です。
現在App_Code配下のクラスを修正したら、
ビルドが完成するまで3分15秒ほどかかります。たまりません。
この問題も、構成の変更などで解決できるならやってみたいですね。

ありがとうございました。

お礼日時:2008/10/21 15:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!