Spring.net的AutoFixture和AutoData

时间:2017-04-13 09:17:21

标签: unit-testing nunit spring.net autofixture nunit-3.0

在我们的项目中,我们使用spring.net和nhibernate来持久保存我们的域实体。 Out Test Data Builder部分持久化实体,因此他们也使用spring.net。

我遇到了AutoFixture和AutoData并试图将它用于我们的测试,通过AutoData注入实体实例来减少单元测试的部分安排。

[Test, BuilderAutoData]
public void TestAutoFixture(City city1, City city2, User user, User user2) {
     // ... Assert something
}

我尝试通过实施BuilderAutoDataAttributeBuilderAutoDataCustomization

来自定义自动数据
public class BuilderAutoDataAttribute : AutoDataAttribute {
    public BuilderAutoDataAttribute() : base(new Fixture().Customize(new BuilderAutoDataCustomization())) {
    }
}

public class BuilderAutoDataCustomization : ICustomization {
    public void Customize(IFixture fixture) {
        fixture.Register<User>(() => Create.A.User);
        fixture.Register<City>(() => Create.A.City);
        fixture.Register<District>(() => Create.A.District);
    }
}

现在我面临的问题是,在注册spring-context之前调用Create.A.User(调用测试数据构建器)并抛出异常,因为没有spring-context。

public static class Create {
    public static class A {
        public static CityBuilder City {
            get {
                // instantiate Builder from spring
                return ContextRegistry.GetContext().GetObject<CityBuilder>();
            }
        }
        public static UserBuilder User {
            get {
                return ContextRegistry.GetContext().GetObject<UserBuilder>();
            }
        }
    }
}

是否有可能在使用Spring.net的工厂中使用AutoData(或在Test-Setup中创建的东西)?

0 个答案:

没有答案