忙しい現代人の腰&肩のお悩み対策!

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配下にクラスはおかず、
別プロジェクトに切り出すものなのでしょうか。

このQ&Aに関連する最新のQ&A

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(VS.80).aspx
に細かい使い方掲載されていますので、宜しければ検討して
頂けると幸いです。宜しくお願いします。

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

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

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

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

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

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSQL Server のキャラクターセット(内部文字コード)は何処で定義するのでしょうか?

SQL Server超初心者です。(Oracleについては約1年ちょっとの経験はあります)どうぞよろしくお願いします。
今回SQL Server2005 を使って簡単なシステムを構築する事になりました。
SQL Serverが扱う文字コートについて教えてください。
Oracleを使っていた時の経験としてDB内部のキャラクターセットと
クライアントで使う文字セット(NLS_LANG)を意識しておかないと、いろんな「文字化け」問題に遭遇した時に対応できませんでした。
きっとSQL Serverにおいても同じような事ではないかと思いここに質問させていただきます。
以下2点についてどなたかコメント願います。
1.(Oracleでいうキャラクターセット)はどこで定義するのでしょうか?
2.OracleでいうNLS_LANGに相当するものはあるのでしょうか?
 (ひょっとしたらマイクロソフト製品なのでサーバもクライアントもCP932固定なのでしょうか?)

根本的にはシステム構築する上で『極力文字化けに遭遇したくない』思い出このような質問をさせていただきました。
『文字化け』について注意点などありましたら合わせてコメントいただければ助かります。
以上よろしくお願いします。

SQL Server超初心者です。(Oracleについては約1年ちょっとの経験はあります)どうぞよろしくお願いします。
今回SQL Server2005 を使って簡単なシステムを構築する事になりました。
SQL Serverが扱う文字コートについて教えてください。
Oracleを使っていた時の経験としてDB内部のキャラクターセットと
クライアントで使う文字セット(NLS_LANG)を意識しておかないと、いろんな「文字化け」問題に遭遇した時に対応できませんでした。
きっとSQL Serverにおいても同じような事ではないかと思いここに質問...続きを読む

Aベストアンサー

Windowsのロケールの設定を日本語にした状態でSQLServerをインストールした場合、cp932がデフォルトの照合順序になります。照合順序については参考URLをご覧下さい。

SQLServerではわかりませんが、PostgresではJDBCドライバ部分で変換していたように記憶しています。ODBCドライバではAutoTranslateという機能があります。

このため、ODBC接続で何も考えずにvarcharを使用するとcp932になります。

参考URL:http://www.microsoft.com/japan/msdn/sqlserver/sql2005/bb330962.aspx

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む


人気Q&Aランキング