【问题标题】:Fake It Easy - A<T>.Ignored() with string - A<string>.Ignored()假装很容易 - A<T>.Ignored() 与字符串 - A<string>.Ignored()
【发布时间】:2013-07-10 16:25:06
【问题描述】:

我有一个带有字符串参数和布尔返回值的方法。 我想确保它总是返回 true

我试过了

myClass.Foo(A<string>.Ignored)
 .WithReturnType<bool>()
 .Returns(true);

现在我得到以下异常

System.ArgumentException:指定的对象未被识别为 假对象。结果 StackTrace: bei FakeItEasy.Core.DefaultFakeManagerAccessor.GetFakeManager(对象 代理) bei FakeItEasy.FakeFacade.GetFakeManager(Object fakedObject) 北 FakeItEasy.Configuration.FakeConfigurationManager.CallTo(Object fakeObject) bei FakeItEasy.A.CallTo(Object fake) [...]

我做错了什么?

【问题讨论】:

    标签: c# fakeiteasy


    【解决方案1】:

    你没有向我们展示你是如何制作myClass的。它是您班级的一个实例吗?应该是假的。并且语法关闭。

    考虑FakeItEasy tests中的这个示例用法:

    var foo = A.Fake<IFoo>();
    A.CallTo(() => foo.Baz(null, null)).WithAnyArguments().Returns(99);
    

    所以你的例子最终可能会是这样的

    var myClass = A.Fake<MyClass>(); // or maybe IMyClass - if Foo isn't 
                                     // virtual, you'll have problems faking it
    A.CallTo((() => myClass.Foo(null)).WithAnyArguments().Returns(true);
    

    或者() =&gt; myClass.Foo(A&lt;string&gt;.Ignored),不过我没试过。

    【讨论】:

      【解决方案2】:

      我建议使用完整的简短形式(正如 Blair Conrad 所说)

      var myClass = A.Fake<MyClass>(); // or maybe IMyClass - if Foo isn't 
                                       // virtual, you'll have problems faking it
      A.CallTo((() => myClass.Foo(A<string>.Ignored)).Returns(true);
      

      您可以将A&lt;string&gt;.Ignored 替换为A&lt;string&gt;._,它们是等效的,但后者更具可读性

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-27
        • 1970-01-01
        • 1970-01-01
        • 2010-12-21
        • 1970-01-01
        • 2012-04-09
        相关资源
        最近更新 更多