【发布时间】:2012-07-13 16:40:58
【问题描述】:
在基于 AutoFixture 的测试中,我试图尽可能清晰地表达以下内容:
当我把<input>传递给这个方法的参数x,匿名填写其他参数,结果是……
以工厂方法为例:-
class X
{
public static X Create( Guid a, Guid b, Guid c, String x, String y);
我试图用一系列简洁的测试来表达:
- 如果我为
x传递 null,它应该抛出 - 如果我为
y传递 null,它应该抛出
为了表达我可以说:
var fixture = Fixture();
var sut = default( Func<Guid, Guid, Guid,string,X>);
sut = fixture.Get( ( Guid anonA, Guid anonB, Guid anonC, string anonY ) =>
x =>
X.Create( anonA, anonB, anonC, x, anonY ) );
Assert.Throws<ArgumentNullException>( () => sut( null));
对于第二种情况,只是略有不同,我需要这样做:
var fixture = Fixture();
var sut = default( Func<Guid, Guid, Guid,string,X> );
sut = fixture.Get( ( Guid anonA, Guid anonB, Guid anonC, string anonX ) =>
y =>
X.Create( anonA, anonB, anonC, anonX, y ) );
Assert.Throws<ArgumentNullException>( () => sut( null));
对于属性,AutoFixture 中有 With。方法(和/或 ctor)参数是否有等价物?
PS 0。我不介意在这种情况下是否有必要进入“魔术”字符串 - 即,将 x 位设为 "x"。
PS 1. 房间里的另一头大象是我在 AutoFixture 中遇到了 Get 的 4 倍过载 - 或者是因为我在这个环境中有一个旧版本?
PS 2. 也愿意接受关于如何建模的更好建议 - 只要他们处理我希望它是方法调用而不是属性或字段的事实(并且我希望它在AutoFixture 样式)。
【问题讨论】:
标签: c# unit-testing mocking autofixture