1

次の仕様があります (Machine.Specifications または mSpec を使用):

public class when_a_user_logs_in_successfully
{
    static Browser _browser;
    static BrowserResponse _response;

    Establish context = () =>
        {
            var bootstrapper = new ConfigurableBootstrapper();

            _browser = new Browser(bootstrapper);
        };

    Because of = () => _response = _browser.Get("/Login", with => with.HttpRequest());    

    It should_return_a_successful_response = () => _response.Body.ShouldNotBeNull();
}

仕様からのルートは、次のモジュールを見つける必要があります。

public class LoginModule : NancyModule
{
    public LoginModule()
    {
        Get["/Login"] = parameters => "test";
    }
}

しかし、何らかの理由で、応答のステータスは「NotFound」であり、ストリームが閉じられている/破棄されていることを示す例外をスローする Body があります。私の仕様ソリューションには、LoginModule を含むアセンブリへの参照があります。スペックがモジュール内のルートを見つけられるようにするには、他に何をすべきですか?

4

1 に答える 1

6

これは、他のアセンブリへの「ハード参照」がない (つまり、そこにあるタイプを直接使用していない) ためです。そのため、.Net はそれをロードせず、Nancy はそれを見つけられません。

アセンブリをロードするために使用できる AppDomainAssemblyTypeScanner があります (DLL のワイルドカード セットをロードするために使用できるメソッドがいくつかあります)。または、メイン アセンブリ内の型の 1 つの変数をテスト アセンブリ。

将来的には、テスト ランナーが検出できるすべての DLL をデフォルトでロードするように変更し、問題が発生した場合にそれを変更するオプションを追加する必要があると思います。

于 2011-11-15T16:03:23.200 に答える