c# - 在 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);
}
解决方案
尝试在设置中的每个测试执行之前初始化您的 SUT(我假设您在这里使用 NUnit):
[SetUp]
public void Init()
{
Sut = new MyClass1();
}
推荐阅读
- python - Tensorflow、OpenAI Gym、Keras-rl 在基本强化学习示例中的性能问题
- json - 使用 JSON Extractor 从变量中提取而不是响应
- mapbox - 热图层的 queryRenderedFeatures 一无所获
- reactjs - 如何在 React 中使用样式化组件?
- kendo-ui - 剑道网格单元格模板
- android - Android:在包含的布局中处理 Onclick 侦听器
- jboss - SAP 集成所需的 Red Hat AMQ Broker 7.2.0 Jar 文件
- regex - 如何在 Sublime 3 中搜索和替换 guid
- c# - 为什么这个简单的 For 循环不起作用?
- c++ - C++ 区分 Functor 和 Value 模板参数