CodeGo.net>如何告诉Autofixture创建具有不同ID的对象?
作者:互联网
我在测试中有一个简单的Setup方法,该方法可以创建一个对象的两个实例(make by和Id以及Description属性),并且已经使用自动修复功能将其完成:
MyObject o1 = fixture.Create<MyObject>();
MyObject o2 = fixture.Create<MyObject>();
接下来,我尝试将对象保存到db,但是出现重复键错误,我调试了安装程序,并看到o1和o2具有相同的ID
根据Wiki,应逐步生成数字:
Autogenerated Number
int autoGeneratedNumber = fixture.Create<int>();
Sample Result
int: 1, followed by 2, then by 3, etc.
但似乎id不能以这种方式与对象属性一起工作,所以现在我使用以下简单的解决方法:
MyObject o1= fixture.Build<MyObject>().With(x => x.Id, 1).Create();
MyObject o2= fixture.Build<MyObject>().With(x => x.Id, 2).Create();
但不是很喜欢
这是使用ISpecimenBuilder设置Autofixture使其生成渐进ID的方法吗?
更多信息:
这是我的基础测试课:
public class BaseDBTest
{
public BaseDBTest()
{ }
public Ploeh.AutoFixture.Fixture fixture { get { return new Fixture(); } }
}
和测试设置:
[TestFixture]
public class MyObjectTests : BaseDBTest
{
MyObject o1;
MyObject o2;
[TestFixtureSetUp]
public void CreaDati()
{
o1= fixture.Create<MyObject >();
o2= fixture.Create<MyObject >();
}
}
奇怪的是:
如果我调试的特定测试对象是使用不同的ID和随机数创建的,但是如果我调试了我项目的所有测试(使用Visual Studio 2013使用NunitRunner,则ID相等)
编辑2
MyObject的定义,相当复杂,抱歉:
public class MyObject: LookUpObject<MyObject, int>
{
}
public abstract class LookUpObject<TObject, TKeyType> : EquatableObject<TObject>, IKeyedEntity<TKeyType>
where TObject : class
where TKeyType : struct
{
private TKeyType id;
private string description;
private bool isValid;
public virtual TKeyType Id
{
get { return id; }
set { id = value; }
}
public virtual string Description
{
get { return description; }
set { description= value; }
}
public virtual bool IsValid
{
get { return isValid; }
set { isValid= value; }
}
protected LookUpObject()
{
}
}
编辑3
Nunit产生的奇怪事物的图像(我担心它可能取决于Visual Studio),
一次试运行link
项目测试运行link
解决方法:
这是因为在获取Fixture的基类属性中,您每次都返回一个新的Fixture对象.仅可为每个Fixture实例保证自动生成ID.
更改此:
public class BaseDBTest
{
public BaseDBTest()
{ }
public Ploeh.AutoFixture.Fixture fixture { get { return new Fixture(); } }
}
对此:
public class BaseDBTest
{
private Fixture _fixture = new Fixture();
public BaseDBTest()
{ }
public Ploeh.AutoFixture.Fixture fixture { get { return _fixture; } }
}
标签:autofixture,unit-testing,c 来源: https://codeday.me/bug/20191029/1958366.html