【问题标题】:FackItEasy: How to get access to the value of a parameter passed to a faked interface?FakeItEasy:如何访问传递给伪造接口的参数值?
【发布时间】:2021-08-19 07:58:41
【问题描述】:

我想检查传递给伪造接口的结构的属性:

JobSpec passedJobSpec = null;
A.CallTo(() => fakeInvoker.Create(A<JobSpec>._))
            .Invokes((JobSpec jobSpec) => passedJobSpec = jobSpec);
Assert.NotNull(passedJobSpec.Property1);

但我在访问passedJobSpec.Property1 时收到NullReferenceException。 我尝试了其他一些变化,但到目前为止没有运气。感谢有人可以提供帮助。

【问题讨论】:

    标签: c# unit-testing fakeiteasy


    【解决方案1】:

    A.CallTo 将模拟 fakeInvoker.Create 的行为,但仍需要调用 fakeInvoker.Create

    鉴于我们有以下定义:

    public interface IInvoker
    {
        void Create(JobSpec jobSpec);
    }
    
    public class JobSpec
    {
        public string Property1 { get; set; }
    }
    

    我们的测试用例如下所示:

    var fakeInvoker = A.Fake<IInvoker>();
    JobSpec passedJobSpec = null;
    A.CallTo(() => fakeInvoker.Create(A<JobSpec>._))
        .Invokes((JobSpec jobSpec) => passedJobSpec = jobSpec);
    
    // Make this call to fire off the behaviour
    fakeInvoker.Create(new JobSpec{Property1 = "Hello world"});
    
    Assert.NotNull(passedJobSpec.Property1);
    

    【讨论】:

    • 我将该调用作为我正在测试的逻辑的一部分,但我意识到我的测试没有到达那里,因为其他地方的测试设置问题很小。所以,是的,这行得通。谢谢。
    【解决方案2】:

    这里提供了一些其他很好的例子:https://www.alexjamesbrown.com/blog/development/asserting-multiple-properties-argument-fakeiteasy/

    var fakeInvoker = A.Fake<IInvoker>();
    JobSpec passedJobSpec = null;
        .Invokes(p => passedJobSpec = p.GetArgument<JobSpec>(0));
    

    这在接口有多个参数时特别有用。

    【讨论】:

      猜你喜欢
      • 2012-06-02
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 2023-03-24
      • 2011-04-12
      • 2022-10-24
      相关资源
      最近更新 更多