我正在将我的测试移植到AutoFixture 2.0,并且我遇到了一些我无法解释或解决的奇怪行为。这个简单的测试对我来说失败了:
var autoFixtures = new Fixture();
var file = autoFixtures.Build<File>()
.With(f => f.Name, "bleh.txt")
.CreateAnonymous();
Assert.That(file.Name, Is.EqualTo("bleh.txt")); // Fail?!
如果我将Name
更改为File
的另一个属性,则测试会成功,这会让我认为我Name
存在某种自定义项正在使用AutoFixture 1.0。不过,我已经搜索过我的代码了,我找不到那样的东西。
启用跟踪似乎没什么帮助。
autoFixtures.Behaviors.Add(new TracingBehavior());
显示,以及其他内容:
Requested: System.String Name
Requested: Ploeh.AutoFixture.Kernel.SeededRequest
Created: Ploeh.AutoFixture.Kernel.NoSpecimen
Requested: Ploeh.AutoFixture.Kernel.SeededRequest
Requested: System.String
Created: Ploeh.AutoFixture.Kernel.NoSpecimen
Requested: System.String
Created: 8a022fda-fa4e-49b7-b0c2-285fef765386
Created: Name8a022fda-fa4e-49b7-b0c2-285fef765386
Created: Name8a022fda-fa4e-49b7-b0c2-285fef765386
FWIW,Name
被声明为File
基类的虚拟属性,然后在File
中被覆盖:
public abstract class Item
{
public virtual string Name { get; set; }
...
}
public class File : Item
{
public override string Name { get; set; }
...
}
如果有人对我可能会尝试的事情有任何想法,或者我可能无意中定制了Name
属性的行为,我将非常感激!
答案 0 :(得分:5)
您刚刚在AutoFixture 2.0中发现了一个错误。我现在解决了它并将更改推送到存储库(changeset 3efe812aecd1),所以如果你download the latest source并编译它,它应该可以工作。
如果您感兴趣,它与被子类重写的虚拟属性有关 - 显然不是我经常做的事情。
抱歉这个错误。如果问题尚未解决,或者您有其他问题,请告诉我。