首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nancy测试交互

Nancy测试交互
EN

Stack Overflow用户
提问于 2016-04-11 00:05:14
回答 1查看 288关注 0票数 2

我试图找出为什么我们的集成测试不是独立的。

每项测试的基本部分是:

代码语言:javascript
复制
var builder = new ContainerBuilder();
// IoC registrations, typically SingleInstance lifetimes or RegisterInstance
var browser = new Browser(new CustomBootstrapper(builder));
// browser.Post...
// Assertions

每个测试都使用新的ContainerBuilder和浏览器实例。

我们的一个测试在独立运行时通过,但如果与另一个类似的测试一起运行,则会失败。这发生在两个不同的测试运行程序中(TestDriven.Net和JetBrains)。

通过检查HashCodes,我可以看到第一个测试使用并由IoC容器注入的对象出现在第二个测试中(并且与在那里创建的对象不匹配)。方法对错误的对象调用,因此测试失败。

代码不使用静态成员。

我是不是误解了南希、Nancy.Testing或奥文的工作方式?这些测试如何相互影响?

请按要求提供更多详细信息:

代码语言:javascript
复制
[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);
}

在单独的TestFixture类中,没有安装/解压:

代码语言:javascript
复制
[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;这并不影响问题。)

每次测试后对customBootstrapper的处理也没有什么区别。

(CustomBootstrapper没有静态字段,并从AutofacNancyBootstrapper下降。太长了,不能在这里张贴。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-12 22:07:07

我们的一个开发人员在代码中发现了这个问题。

代码语言:javascript
复制
using Nancy.Authentication.Forms;

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

IOrganizationService的实现在其构造函数中注入了一个OrganizationCache

静态字段是罪魁祸首。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36537884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档