在 FakeItEasy 测试期间访问 属性 的运行时值
Accessing runtime value for a property during FakeItEasy test
我们正在使用 FakeItEasy 进行单元测试。
我有一个方法 1 return 是一个 属性 的值,同时在运行时更新它另一个 属性2 值。
我需要的是在测试期间获得 属性2 的更新值。但它不会 return 更新值,它总是 returning default/initial 值。
如果我将这个 method1 包装到另一个 method2 中(这只是 return 更新值的目的) - 我可以获得我需要的东西但是代码很丑陋,因为我正在为单一测试目的创建新方法。
如何在保持代码整洁的同时传递更新值?
这是我的代码。
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();
}
我们正在使用 FakeItEasy 进行单元测试。 我有一个方法 1 return 是一个 属性 的值,同时在运行时更新它另一个 属性2 值。
我需要的是在测试期间获得 属性2 的更新值。但它不会 return 更新值,它总是 returning default/initial 值。 如果我将这个 method1 包装到另一个 method2 中(这只是 return 更新值的目的) - 我可以获得我需要的东西但是代码很丑陋,因为我正在为单一测试目的创建新方法。
如何在保持代码整洁的同时传递更新值?
这是我的代码。
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();
}