断言 Fun<T> 被调用
Assert that Fun<T> was invoked
鉴于以下 class,我如何测试调用 MethodUnderTest
时调用 GetSomething
?
public class SystemUnderTest
{
private Foo foo;
public string MethodUnderTest(int input)
{
return foo.Get(x => x.GetSomething(input));
}
}
测试
public void VerifyGetSomethingInvokedWhenMethodUnderTestIsInvoked()
{
//Arrange
var sut = new SystemUnderTest();
//Act
string unusedResult = sut.MethodUnderTest(5);
//Assert
A.CallTo(()=> sut.MethodUnderTest(A<int>.Ignored)) //Cant figure out how to test the Func<T> invocation
}
一般来说,检测假货的方法是
- 创建一个假对象来抽象出你的系统在测试下的合作者
- 可选地配置假的行为
- 创建被测系统并提供假的
- 运行被测系统
- 可选择询问假货
您缺少第 1 部分、第 3 部分(“提供”部分),第 5 部分略有偏差。我不知道 x
在您的代码中代表什么,但是您需要伪造它是什么类型,并确保将伪造提供给 foo
实例。然后你会得到类似
的东西
public void VerifyGetSomethingInvokedWhenMethodUnderTestIsInvoked()
{
//Arrange
var fakeX = A.Fake<IX>();
var sut = new SystemUnderTest(fakeX); // maybe? which would pass it to `foo`?
//Act
string unusedResult = sut.MethodUnderTest(5);
//Assert
A.CallTo(() => fakeX.GetSomething(5)).MustHaveHappened();
}
鉴于以下 class,我如何测试调用 MethodUnderTest
时调用 GetSomething
?
public class SystemUnderTest
{
private Foo foo;
public string MethodUnderTest(int input)
{
return foo.Get(x => x.GetSomething(input));
}
}
测试
public void VerifyGetSomethingInvokedWhenMethodUnderTestIsInvoked()
{
//Arrange
var sut = new SystemUnderTest();
//Act
string unusedResult = sut.MethodUnderTest(5);
//Assert
A.CallTo(()=> sut.MethodUnderTest(A<int>.Ignored)) //Cant figure out how to test the Func<T> invocation
}
一般来说,检测假货的方法是
- 创建一个假对象来抽象出你的系统在测试下的合作者
- 可选地配置假的行为
- 创建被测系统并提供假的
- 运行被测系统
- 可选择询问假货
您缺少第 1 部分、第 3 部分(“提供”部分),第 5 部分略有偏差。我不知道 x
在您的代码中代表什么,但是您需要伪造它是什么类型,并确保将伪造提供给 foo
实例。然后你会得到类似
public void VerifyGetSomethingInvokedWhenMethodUnderTestIsInvoked()
{
//Arrange
var fakeX = A.Fake<IX>();
var sut = new SystemUnderTest(fakeX); // maybe? which would pass it to `foo`?
//Act
string unusedResult = sut.MethodUnderTest(5);
//Assert
A.CallTo(() => fakeX.GetSomething(5)).MustHaveHappened();
}