c# - 断言乐趣被调用
问题描述
给定以下类,我如何测试何时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();
}
推荐阅读
- qt - 为什么当由 Opengl 绘制并进行透视投影时球体会变形?
- python - 使用opencv从图像中去除闪光眩光
- php - Wordpress 输出 Category Children Posts of single Parent Category
- python - 如何在 Pyqt5 setcentralWidget 中取回我的主窗口?
- laravel - 使用 v-for laravel vuejs 在表格中显示数据
- r - 通过闪亮的 R 中的动态相关输入过滤器在 GGplot 上绘制正确的百分比标签
- swiftui - SwiftUI PlaygroundBook 我无法访问其他视图
- java - json注释将null设置为值
- javascript - 我可以将原型方法声明放在 JS 的构造函数中吗
- cucumber - 如何控制 Maven Surefire 插件中的实例与黄瓜 testng 执行并行执行