自动混合,预期的行为?

时间:2014-07-11 10:46:43

标签: autofixture

进行类似的测试:

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的问题,而是代码的问题?

2 个答案:

答案 0 :(得分:1)

如果我在测试中运行调试器,我会看到以下内容:

Debugging

Autofixture为speed100index字段分配一个随机数,因为它是公开的,而在你的数组中,第53点没有任何内容(来自我的屏幕截图)

如果您将speed100index设为私有,则Autofixture不会重新分配该号码,您的测试也会通过。

答案 1 :(得分:1)

AutoFixture会为您提供有关课程设计的反馈。反馈是,你应该遵循这个类的更面向对象的设计。

保护您的私人状态,防止您的班级进入不一致状态。

您需要将speed100index字段设为私有字段,以确保其与values列表保持一致。