我有班级模特角色:
public partial class Role
{
public Role()
{
this.Users = new HashSet<User>();
}
public int Id { get; set; }
public string RoleName { get; set; }
public virtual ICollection<User> Users { get; set; }
}
而UnitTesting我需要嘲笑它。 所以我有代码:
public class RoleControllerTest
{
private IUnitOfWork fakeRepo;
[TestInitialize]
public void Initialize()
{
Mock<IUnitOfWork> mock = new Mock<IUnitOfWork>();
mock.Setup(m => m.roleRepository.Get(null)).Returns(new[]{
new Role{Id=1, RoleName="Admin",MissingArgument},
new Role{Id=2,RoleName="User",MissingArgument}
});
}
}
我不知道如何模拟
public virtual ICollection<User> Users { get; set; }
尝试null但是这个alsa返回错误。
你能告诉我什么变量以及我应该用什么类型代替MissingArgument
?
答案 0 :(得分:2)
我假设Moq
- Users
只是您要为其生成假数据的Role
类的属性,因此您可以继续使用对象初始化程序语法进行初始化它在你的模拟Get实现的Returns
中,如下所示:
Mock<IUnitOfWork> mock = new Mock<IUnitOfWork>();
mock.Setup(m => m.roleRepository.Get(It.IsAny<int>()))
.Returns(new[]{
new Role
{
Id=1,
RoleName="Admin",
Users = new List<User>
{
new User
{
// Set SomeUserProperties Here
},
// Add another User here if needed
}},
new Role
{
Id=2,
RoleName="User"
// Add users here
}
}
);
如果您发现自己需要在多个单元测试中返回相同的假数据,则可以创建一组常见的预制static readonly
个对象,或者使用object mother factory表示各种users
和{ {1}},这会干掉您的代码。