在基于 AutoFixture 的测试中,我试图尽可能清晰地表达以下内容:
当我传给这个方法的<input>
参数x
,匿名填写其他参数,结果是……
以工厂方法为例:-
class X
{
public static X Create( Guid a, Guid b, Guid c, String x, String y);
我试图表达为一系列简洁的测试:
- 如果我通过 null for
x
,它应该抛出 - 如果我通过 null for
y
,它应该抛出
为了表达我可以说:
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));
对于属性,With
在 AutoFixture 中有。方法(和/或 ctor)参数是否有等价物?
PS 0. 我不介意在这种情况下是否有必要进入“魔术”字符串 - 即,有x
一点 be "x"
。
PS 1. 房间里的另一头大象是我的头撞到了Get
AutoFixture 中的 4 倍过载 - 或者是因为我在这个环境中有一个旧版本?
PS 2.也愿意接受关于如何建模的更好建议 - 只要他们处理我希望它是方法调用而不是属性或字段的事实(并且我希望它在 AutoFixture 样式中工作)。