进行类似的测试:
public class myClass
{
public int speed100index = 0;
private List<int> values = new List<int> { 200 };
public int Speed100
{
get
{
return values[speed100index];
}
}
}
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var fixture = new Fixture();
var sut = fixture.Create<myClass>();
Assert.AreEqual(sut.Speed100, 200);
}
}
本来可以预期这会起作用,但我明白为什么不行。但是我怎么说,这不是AutoFixture的问题,而是代码的问题?
答案 0 :(得分:1)
如果我在测试中运行调试器,我会看到以下内容:
Autofixture为speed100index
字段分配一个随机数,因为它是公开的,而在你的数组中,第53点没有任何内容(来自我的屏幕截图)
如果您将speed100index
设为私有,则Autofixture不会重新分配该号码,您的测试也会通过。
答案 1 :(得分:1)
AutoFixture会为您提供有关课程设计的反馈。反馈是,你应该遵循这个类的更面向对象的设计。
保护您的私人状态,防止您的班级进入不一致状态。
您需要将speed100index
字段设为私有字段,以确保其与values
列表保持一致。