我无法以声明方式表达以下代码:
[Theory]
[InlineData(@"-o=C:\Temp\someFile -p=1")]
[InlineData(@"-p=1 -o=C:\Temp\someFile")]
public void ParseMissingParameterShouldReturnCorrectResult(
string argsString
)
{
.....
var fixture = new Fixture();
fixture.Register<IFoo>(fixture.Create<Foo>);
fixture.Register<IBar>(fixture.Create<Bar>);
var sut = fixture.Create<SomeClass>();
.....
}
在我的生产代码中,我有类似的东西:
new SomeClass(new Foo(new Bar))
将SomeClass的构造函数定义为:
public SomeClass(IFoo foo)
TIA,
大卫
编辑:
SomeClass看起来像
public class SomeClass : IQux
{
private readonly IFoo _foo;
public SomeClass(IFoo foo)
{
_foo= foo;
}
答案 0 :(得分:3)
您可以将SUT(SomeClass
类型)声明为测试方法的参数:
[Theory]
[InlineAutoMockData(@"-o=C:\Temp\someFile -p=1")]
[InlineAutoMockData(@"-p=1 -o=C:\Temp\someFile")]
public void ParseMissingParameterShouldReturnCorrectResult(
string argsString,
SomeClass sut)
{
}
创建[InlineAutoMockData]
属性的简便方法是:
internal class InlineAutoMockDataAttribute : CompositeDataAttribute
{
internal InlineAutoMockDataAttribute (params object[] values)
: base(
new InlineDataAttribute(values),
new AutoDataAttribute(
new Fixture().Customize(
new CompositeCustomization(
new AutoMoqCustomization()))))
{
}
}
注意:
如果您还需要在IFoo
或IBar
模拟实例上设置期望值,则可以冻结它们,以便在{0}传递相同的Frozen
实例SomeClass
实例:
[Theory]
[InlineAutoMockData(@"-o=C:\Temp\someFile -p=1")]
[InlineAutoMockData(@"-p=1 -o=C:\Temp\someFile")]
public void ParseMissingParameterShouldReturnCorrectResult2(
string argsString,
[Frozen]Mock<IFoo> mock,
[Frozen]Mock<IBar> stub,
SomeClass sut)
{
}