2016-04-11 10 views
2

私たちのインテグレーション・テストがなぜ独立しているのか理解しようとしています。ナンシー・オーイン・テスト・インタラクション

各テストの重要な部分は、次のとおりです。

var builder = new ContainerBuilder(); 
// IoC registrations, typically SingleInstance lifetimes or RegisterInstance 
var browser = new Browser(new CustomBootstrapper(builder)); 
// browser.Post... 
// Assertions 

各テストは新鮮ContainerBuilderとブラウザのインス​​タンスを使用しています。

私たちのテストの1つは、独立して実行されたときに合格しますが、別の同様のテストと共に実行されると失敗します。これは、2つの異なるテストランナー(TestDriven.NetとJetBrains)で発生します。

インストルメントでは、最初のテストで使用され、IoCコンテナによって注入されたオブジェクトが2番目のテストで表示され、そこに作成されたオブジェクトと一致しないことをHashCodesで確認できます。メソッドが間違ったオブジェクトで呼び出されるため、テストは失敗します。

コードでは静的メンバーは使用されません。

Nancy、Nancy.Testing、またはOWINの仕組みについて誤解していますか?これらのテストはどのように互いに影響を及ぼしますか?要求ごと

、詳細:別のTestFixtureクラスで

[Test] 
public void Test1() 
{ 
    var organizationCache = new OrganizationCache(); 
    // Logs Creating OrganizationCache with HashCode:43641814 (varies by run) 
    organizationCache.AddOrganization(organization); 
    ContainerBuilder builder = AutofacTestContainerBuilderFactory.CreateTestContainerBuilder(); 
    builder.RegisterInstance(organizationCache); 
    var browser = new Browser(new CustomBootstrapper(builder)); 

    BrowserResponse browserResponse = browser.Post(
     "/api/...", 
     with => with.JsonBody(model)); 

    browserResponse.StatusCode.ShouldBe(HttpStatusCode.OK); 
} 

、いずれかのセットアップなし/ティアダウンとは:

[Test] 
public void Test2() 
{ 
    var organizationCache = new OrganizationCache(); 
    // Logs Creating OrganizationCache with HashCode:5337202 (varies by run) 
    organizationCache.AddOrganization(organization); 
    ContainerBuilder builder = AutofacTestContainerBuilderFactory.CreateTestContainerBuilder(); 
    builder.RegisterInstance(organizationCache); 
    var browser = new Browser(new CustomBootstrapper(builder)); 

    TestHelpers.Authenticate(browser); // log in (does a browser.Post) 

    BrowserResponse browserResponse = browser.Post(
     "/api/...", 
     with => with.JsonBody(model)); 

    browserResponse.StatusCode.ShouldBe(HttpStatusCode.Created); 

    // Passes if run independently, fails if run with other test 
    // When run with other test, system under test logs both OrganizationCache HashCodes during this test 
} 

CookieBasedSessionsは何とかこれに影響を与えていませんか? (注:私はCookieBasedSessions.Enableアンド別々にパイプラインで新しいSessionを作成together-を削除しようとしたが、これは問題には影響を与えませんでした。)customBootstrapperの廃棄

各テストがいずれかの差は行われません後。

CustomBootstrapperには、静的なフィールドを持っていないとAutofacNancyBootstrapperから下る。それはここに投稿するには長すぎるのです。)私たちの開発者の

+0

[TearDown](http://nunit.org/index.php?p=teardard&r=2.6.4)を使ってこれらのテストをクリアして初期化するか、これがメソッドに入っていますか? – lloyd

+0

さらにコードを表示できますか?つまり、それが壊れていることを示す単位テストと、それを実行するともう一方のブレークを引き起こす単位テストですか?あなたがそれを使用している場合は、セットアップとティアダウンの方法もあります。 – andreasnico

+0

@andreasnicoとは何ですか – Jon

答えて

0

一つは、我々のコードで問題を発見しました。

using Nancy.Authentication.Forms; 

public class UserMapper : IUserMapper 
{ 
    public static IOrganizationService OrganizationService { get; set; } 
    // ... 
} 

IOrganizationServiceの実装では、コンストラクタに注入OrganizationCacheを有しています。

固定フィールドが原因でした。

関連する問題