c# - Moq 中没有退货方法
问题描述
我使用 .NET Standard 创建了一个单元测试类库,这就是我实现它的方式。我使用的起订量版本是4.10.0。
[TestFixture]
public class EmployeeBusinessTests
{
private Employee _employee;
private Mock<IEmployeeRepository> _employeeRepository;
private Mock<IUnitOfWork> _unitOfWork;
private EmployeeBusiness _employeeBusiness;
[SetUp]
public void SetUp()
{
_employee = new Employee
{
Id = 1,
FirstName = "John",
LastName = "Smith",
BirthDate = new DateTime(1965, 12, 31)
};
_employeeRepository = new Mock<IEmployeeRepository>();
_unitOfWork = new Mock<IUnitOfWork>();
}
[Test]
public void AddEmployee_EmployeeIsNull_ReturnNull()
{
_employeeRepository.Setup(er => er.Add(new Employee()))
.Returns(_employee); // No Returns method!
// … Other code here
}
}
你能帮我理解为什么我找不到Returns()方法吗?
解决方案
正如评论中所述,您的Add
方法是void
,因此您不能Returns
在Setup
.
对于您要实现的目标,请查看 usingCallback
而不是Returns
.
_employeeRepository.Setup(er => er.Add(It.IsAny<Employee>)).Callback<Employee>(e => _employee = e);
// Add code here to perform actions
Assert.IsNull(_employee);
这是一个基于您发布的代码的简单示例,而不是我实际实现存储库的方式(例如,您Employee
在这里只能拥有一个)。
推荐阅读
- codeigniter - 在 Codeigniter 中发布表单后的 URL 更改问题
- php - 如何在 PHP 中使用 API 在不刷新页面的情况下获取更新的分数
- php - 如何用 wordpress 函数中两个字符串之间的变量替换 wp-post 内容?
- opencart - 在发票打印中添加客户电子邮件和电话号码
- c++ - CMake/MinGW 未知编译器,gcc.exe 损坏
- jquery - tinyMCE 编辑器按钮文本长度太长,我该如何换行?
- c# - 使用tagit jquery在代码后面的文本框中附加多个标签
- solr - Janus Graph HBase 和 Solr 未知外部索引后端:jgex
- python - 始终返回零文档的 Mongo 查询
- reference - 为什么我可以返回对本地文字的引用而不是变量?