我使用.NET Standard创建了一个单元测试类库,这就是我实现它的方式。我正在使用的Moq版本为 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()方法?
答案 0 :(得分:1)
正如评论中所述,您的Add
方法是void
,因此您不能在Returns
上使用Setup
。
对于要实现的目标,请考虑使用Callback
而不是Returns
。
_employeeRepository.Setup(er => er.Add(It.IsAny<Employee>)).Callback<Employee>(e => _employee = e);
// Add code here to perform actions
Assert.IsNull(_employee);
这是一个简单的示例,它基于您发布的代码,而不是我实际上如何实现存储库(例如,您在这里只能拥有一个Employee
)。