在我们的项目中,我们使用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
}
我尝试通过实施BuilderAutoDataAttribute
和BuilderAutoDataCustomization
:
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中创建的东西)?