使用 NUnit 和 Moq 进行测试:用例
Testing Using NUnit and Moq: use case
我的企业 class 管理 USER
实体。
在这个 class 中,我有一个方法 return 单个用户的 id:
public Utente GetUser(int id)
{
var utente = _userDataManager.GetUserById(id);
return _mapper.Map<Utente>(utente);
}
_userDataManager
是接口,IUSERDATAMANAGER
,用DAL实现了class; GetUserById
return 用户或 null
(使用 EF6 进行的搜索)。
_mapper
是一个 IMAPPER
接口(自动映射器)。
方法 return 是映射对象。
我有两个问题:
测试这个方法有意义吗?
我应该模拟这两个对象吗?
一个黑盒示例将不胜感激。
Does it make sense to test this method?
如果值得编写代码,那么就值得测试代码。
Should I mock both the object?
在测试被测对象时,您模拟允许测试完成的依赖项。
例如
public void GetUser_Should_Return_Utente() {
//Arrange
var userId = 2;
var user = new User {
UserId = userId,
//... other properties
};
var userDataManagerMock = new Mock<IUserDataManager>();
userDataManagerMock.Setup(_ => _.GetUserById(userId)).Returns(user);
var expected = new Utente {
Id = user.Id,
//...other properties
}
var mapperMock = new Mock<IMapper>();
mapperMock.Setup(_ => _.Map<Utente>(It.IsAny<object>())).Returns(expected);
var subject = new MyBusinessClass(userDataManagerMock.Object, mapperMock.Object);
//Act
var actual = subject.GetUser(userId);
//Assert
Assert.Equal(expected, actual);
}
在上面的代码中,用户数据管理器和映射器在测试 GetUser
方法时模拟并注入到主题中。
这是对上述方法的独立单元测试,表明如果依赖项在调用期间按预期执行,则该方法的当前实现将流向完成。
我的企业 class 管理 USER
实体。
在这个 class 中,我有一个方法 return 单个用户的 id:
public Utente GetUser(int id)
{
var utente = _userDataManager.GetUserById(id);
return _mapper.Map<Utente>(utente);
}
_userDataManager
是接口,IUSERDATAMANAGER
,用DAL实现了class; GetUserById
return 用户或 null
(使用 EF6 进行的搜索)。
_mapper
是一个 IMAPPER
接口(自动映射器)。
方法 return 是映射对象。
我有两个问题:
测试这个方法有意义吗?
我应该模拟这两个对象吗?
一个黑盒示例将不胜感激。
Does it make sense to test this method?
如果值得编写代码,那么就值得测试代码。
Should I mock both the object?
在测试被测对象时,您模拟允许测试完成的依赖项。
例如
public void GetUser_Should_Return_Utente() {
//Arrange
var userId = 2;
var user = new User {
UserId = userId,
//... other properties
};
var userDataManagerMock = new Mock<IUserDataManager>();
userDataManagerMock.Setup(_ => _.GetUserById(userId)).Returns(user);
var expected = new Utente {
Id = user.Id,
//...other properties
}
var mapperMock = new Mock<IMapper>();
mapperMock.Setup(_ => _.Map<Utente>(It.IsAny<object>())).Returns(expected);
var subject = new MyBusinessClass(userDataManagerMock.Object, mapperMock.Object);
//Act
var actual = subject.GetUser(userId);
//Assert
Assert.Equal(expected, actual);
}
在上面的代码中,用户数据管理器和映射器在测试 GetUser
方法时模拟并注入到主题中。
这是对上述方法的独立单元测试,表明如果依赖项在调用期间按预期执行,则该方法的当前实现将流向完成。