代码之家  ›  专栏  ›  技术社区  ›  DavidS

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

  •  3
  • DavidS  · 技术社区  · 13 年前

    我在以声明方式表达以下代码时遇到问题:

    [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;
        }
    
    1 回复  |  直到 13 年前
        1
  •  4
  •   Nikos Baxevanis    13 年前

    您可以申报 SUT (哪个是 SomeClass type)作为测试方法的参数:

    [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)
    {
    }
    
    推荐文章