c# - 模拟在被测方法中初始化的对象
问题描述
我正在尝试测试一个在其中实例化另一个类的类。这是我想模拟的 instatinated 类调用。
这是可能的还是我想念的一种解决方法/更简单的方法?
下面我写了一个更简单的例子,它仍然和我的主要代码有同样的问题。
public interface my_interface
{
int returns_25();
}
public class class_i_want_to_mock : my_interface
{
public int returns_25()
{
// TEST SHOULD FAIL SO NEED MOCK TO PASS THE CASE
return 7645745;
}
}
在另一个命名空间中(它具有访问权限):
public class class_to_test
{
public static int returns_25()
{
class_i_want_to_mock _tempClass= new class_i_want_to_mock ();
// Will return 7645745 unless moq changes return value
int _temp_int = _tempClass.returns_25()
return _temp_int;
}
}
我的测试(失败):
[Test]
public void test_returns_25()
{
// Mock
Mock<my_interface> myMock = new Mock<my_interface>();
myMock.Setup(m => m.returns_25()).Returns(25);
// Act
int return_number = class_to_test.returns_25();
// Assert
Assert.AreEqual(25, return_number);
}
解决方案
由于上面 JSteward 的注入想法,这是工作代码。
代码顺序相同
public interface my_interface
{
int returns_25();
}
public class class_i_want_to_mock : my_interface
{
public int returns_25()
{
// TEST SHOULD FAIL SO NEED MOCK TO PASS THE CASE
return 7645745;
}
}
下课,注意接口的注入
public class class_to_test
{
public static int returns_25(my_interface _temp_interface)
{
// Will return 7645745 unless moq changes return value
int _temp_int = _temp_interface.returns_25()
return _temp_int;
}
}
和测试。注意必须使用 Mock 类的对象 (myMock.Object)
[Test]
public void test_returns_25()
{
// Mock
Mock<my_interface> myMock = new Mock<my_interface>();
myMock.Setup(m => m.returns_25()).Returns(25);
// Act
int return_number = class_to_test.returns_25(myMock.Object);
// Assert
Assert.AreEqual(25, return_number);
}
推荐阅读
- google-analytics - Google 跟踪代码管理器引荐主机名
- angular - 在角度使用 proxy.conf.json 是一个好习惯吗?
- mvvm-light - Windows Template Studio MVVMLight 从详细信息页面访问 ViewModel
- python - 不确定我的 Python/numpy 版本是否使用优化的 BLAS/LAPACK 库?
- c# - 在实体框架中插入多对多的链接表
- mysql - Laravel whereRaw 绑定运算符
- android - android SMS读取权限问题
- sas - sql到proc sql转换
- java - 从基类请求正文 DTO 获取派生 DTO
- python - Anaconda Pycharm 抛出 ImportError DLL load failed: The specified module could not be found : 已解决