Autofixture:如何以声明方式表达以下代码?

2024-06-28

我无法以声明方式表达以下代码:

[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,

David

EDIT:

SomeClass 看起来像

public class SomeClass : IQux
{
    private readonly IFoo _foo;

    public SomeClass(IFoo foo)
    {       
        _foo= foo;
    }

您可以声明SUT http://xunitpatterns.com/SUT.html(哪一个是SomeClasstype)作为测试方法的参数:

[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()))))
    {
    }
}

Note:

如果您还需要设置期望IFoo or IBar你可以模拟实例freeze他们因此相同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)
{
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Autofixture:如何以声明方式表达以下代码? 的相关文章

随机推荐