首页 > 解决方案 > 在 FakeItEasy 测试期间访问属性的运行时值

问题描述

我们使用 FakeItEasy 进行单元测试。我有一个方法 1,它返回一个属性的值,同时在运行时更新它的另一个属性 2 值。

我需要的是在测试期间获取 property2 的更新值。但它不返回更新的值,它总是返回默认/初始值。如果我将此方法 1 包装到另一个方法 2 中(这只是返回更新值的目的) - 我可以获得我需要的东西,但代码很难看,因为我正在为单一测试目的创建新方法。

如何在保持代码干净的同时传递更新的值?

这是我的代码。

public class MyClass1
{

  public int Property3 = 0;

  public MyClass1()
  {
  }

  public virtual async Task<(Guid Property1, string Property2)> MyMethodOne (SendEmailMessageRequest request)
  {
     // Does something here
     property3++;

     return (request.Property1, request.Property2);
  }
}

这是我的测试:

MyClass1 Sut => new MyClass1(); 

[Test]
        public void when_property3()
        {
            var fakeSendEmailMessageRequest = A.Fake<SendEmailMessageRequest>();

            (Guid Property1, string Property2) response;
            Action act = () => response = Sut.MyMethodOne(fakeSendEmailMessageRequest).ConfigureAwait(false).GetAwaiter().GetResult();

            act.Invoke();
            var rtr = Sup.Property3;
            rtr.Should().Be(1);
        }

标签: c#fakeiteasy

解决方案


尝试在设置中的每个测试执行之前初始化您的 SUT(我假设您在这里使用 NUnit):

[SetUp]
public void Init()
{
    Sut = new MyClass1();
}

推荐阅读