我无法以声明方式表达以下代码:
[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;
}
最佳答案
您可以将 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
模拟实例上设置期望值,您可以卡住它们,以便在 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)
{
}
关于c# - Autofixture:如何声明性地表达以下代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16145284/