我的测试中有一个简单的Setup方法,它创建了一个对象的两个实例(make by和
Id
和一个
Description
财产),我已经用autofixture完成了:
MyObject o1 = fixture.Create<MyObject>();
MyObject o2 = fixture.Create<MyObject>();
接下来,我尝试将对象保存到数据库,但我得到了重复键的错误,我调试了设置,并看到o1和o2具有相同的
身份证件
根据
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和随机创建的,但如果我调试我的项目的所有测试(使用Nunit runner的visual studio 2013),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