2013-03-04 22 views
8

ナンシーで足が濡れているだけです。私はWikiのテストプロセスを見ることに本当に興奮しましたが、私が次のことを試してみると、最初にテストに合格することができませんでした。「DefaultNancyBoostrapper」がNancyModuleを見つけられないのはなぜですか

Empty ASP.NET Web Application Projectを作成したVS2010

  1. を使用する:Notify.App、下記のような単純なモジュールを作成し
  2. Install-Package Nancy.Hosting.AspNet
  3. :Notify.UnitTests
  4. Install-Package Nancy.Testing
  5. NotifyModule Class Libraryプロジェクトを作成しましたInstall-Package XUnit
  6. 作成されたシンプルな最初のテスト:テストはHttpStatusCode.NotFoundで失敗DefaultNancyBootstrapperを使用してBaseUrlSpec.cs

私はbootstrapper定義を交換する場合:

var bootstrapper = new ConfigurableBootstrapper(
          with => 
          with.Module<NotifyModule>()); 

テストは合格。 DefaultNancyBootstrapperを使用しているSDHPが動作しなかった理由を理解できませんか?私はそれを壊すために何か間違ったことをしましたか、私は理解の細部を欠いていますか?

using Nancy; 
public class NotifyModule : NancyModule { 
    public NotifyModule() { 
     Get["/"] = _ => HttpStatusCode.OK; 
    } 
} 

NotifyModule


BaseUrlSpec

using Nancy; 
using Nancy.Testing; 
using Notify.App; 
using Xunit; 
public class BaseUrlSpec 
{ 
    [Fact] 
    public void ShouldRespondOk() 
    { 
     var bootstrapper = new DefaultNancyBoostrapper(); 
     var app = new Browser(bootstrapper); 
     var response = app.Get("/", with => with.HttpRequest()); 
     var statusCode = response.StatusCode; 
     Assert.Equal(HttpStatusCode.OK, statusCode); 
    } 
} 

答えて

6

あなたのルートを含むアセンブリがロードされていることを確認する必要があります。アセンブリからタイプを参照すると、これが保証されます。したがって、設定可能なブートストラップを使用するバージョンが機能します。 もう1つを動作させるには、アセンブリから何らかのタイプの参照を追加するだけです。インスタンス化する必要はありません。

+1

クリスチャンは正しいです。これは.NETのものであり、Nancyのものではありません。テストで 'var foo = typeof(NotifyModule)'を実行すると、 'DefaultNancyBootstrapper'で渡されます。しかし、0.17では、Nancyアセンブリhttps:// githubを参照するすべてのアセンブリをロードすることで、 .com/NancyFx/Nancy/pull/1001 – TheCodeJunkie

+1

ユニットテストライブラリの「参考文献」の1つとして私のアプリケーションを持っているだけで、ナンシーがそれを取り上げることはありません。 –

+1

いいえ、アセンブリ参照では不十分です。コード内に参照が必要です。 –

関連する問題