强制中继到mocking框架

本文关键字:mocking 框架 | 更新日期: 2024-10-18 18:57:26

我想创建一个自定义项,将AutoFixture配置为将它确实有实现的类型传递给Moq。我怎样才能一般地做到这一点?

要澄清,请考虑:

    public class test
    {
        public string foo;
        public test(IDictionary<string, string> stuffing)
        {
            foo = stuffing["bogus"];
        }
    }
    [TestMethod]
    public void testInjection()
    {
        var fixture = new Fixture();
        bool didThrow;
        try
        {
            var sut = fixture.Create<test>();
            didThrow = false;
        }
        catch
        {
            didThrow = true;
        }
        Assert.IsTrue(didThrow);
    }

测试通过。AutoFixture为我提供了一个与IDictionary兼容的伪集合。我希望考试不及格。。。特别是,我想把IDictionary交给Moq,并得到一些默认情况下不会抱怨缺少密钥的东西。

我想用类似fixture.UseAutoMoq().ForceRelay<Dictionary<string,string>>()的东西。

我也愿意接受更好的建议。。。但考虑密封的测试类。我正在测试大量使用这种模式的代码,我想要一个围绕它的测试约定

要实现您的要求,您可以将AutoMoqCustomization添加的MockRelay移到知名的集合生成器前面:

[Fact]
public void PassByMovingAutoMoqRelay()
{
    var fixture = new Fixture().Customize(new AutoMoqCustomization());
    var relay = fixture.ResidueCollectors.OfType<MockRelay>().Single();
    fixture.Customizations.Add(relay);
    var sut = fixture.Create<MyClass>(); // Doesn't throw
}

然而,我认为这不是一个好主意,就像大多数人一样。NET集合接口是严重违反LSP的行为,并且不能保证自动嘲笑它们会产生有意义的行为——我认为情况恰恰相反。

强制中继到mocking框架