2016-04-11 27 views
2

Uyumluluk testlerinin neden bağımsız olmadığını anlamaya çalışıyorum.Nancy OWIN test etkileşimi

Her testin önemli bir parçasıdır:

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

Her test taze ContainerBuilder ve Tarayıcı örneklerini kullanır.

Testlerimizden biri bağımsız olarak çalıştırıldığında geçer, ancak benzer başka bir testle birlikte çalışırsa başarısız olur. Bu iki farklı test koşusunda (TestDriven.Net ve JetBrains) olur.

Cihazlar, ilk testte kullanılan ve IoC konteyner tarafından enjekte edilen bir nesnenin ikinci testte (ve orada oluşturulan nesne ile uyuşmuyor) HashCodes öğesini kontrol ederek görebilirsiniz. Yöntemler yanlış nesne üzerinde denir, bu nedenle test başarısız olur.

Bu kod statik üyeleri kullanmaz.

Nancy, Nancy.Testing veya OWIN çalışma şekliyle ilgili bir şeyi yanlış anladım mı? Bu testler birbirlerini nasıl etkileyebilir? İsteğiniz

, daha fazla ayrıntı: Ayrı TestFixture sınıfta

[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); 
} 

ya üzerinde hiçbir kurulum/devrelerde ile:

[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 şekilde bu etkiliyor olabilir mi? (Not: Ben CookieBasedSessions.Enable ve- ayrı ayrı ve boru hattının yeni Session oluşturarak beraber olarak, çıkarmadan çalıştı; bu sorunu etkilemedi.)

customBootstrapper Atılması her test ya hiç fark yaptıktan sonra.

(CustomBootstrapper hiçbir statik alanlar vardır ve AutofacNancyBootstrapper iner. Burada göndermek için çok uzun.) Bizim geliştiricilerin

+0

Bu testleri temizlemek ve bunları başlatmak için kurulum yapmak için bir [TearDown] (http://nunit.org/index.php?p=teardown&r=2.6.4) kullanıyor musunuz veya bu yöntemde mi oturuyorsunuz? – lloyd

+0

Daha fazla kod gösterebilir misiniz? Yani, bu kırılmalar ve tokometreyi çalıştırırken otlaronun kırılmasını sağlayan en uygun şey nedir? Ayrıca bunu kullanıyorsanız kurulum ve gözyaşı yöntemleri. – andreasnico

+0

Ne @andreasnico diyor – Jon

cevap

0

biri bizim kodunda sorunu buldum.

using Nancy.Authentication.Forms; 

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

IOrganizationService uygulanması kendi yapıcı içine enjekte edilen bir OrganizationCache sahiptir. Statik alanı, suçluydu.