这是我的简单代码。
public class Permission
{
public string Name { get; set; }
public bool IsEnable { get; set; }
}
public class User
{
public virtual List<Permission> Permissions { get; set; }
public bool ContainPermission(string permissionName)
{
var result = Permissions.Where(p => p.Name == permissionName && p.IsEnable).FirstOrDefault();
return result != null;
}
}
我想测试方法ContainPermission。 我正在使用Moq并编写此代码:
[TestClass]
public class UserPermissionTest
{
[TestMethod]
public void UserContainPermission_WhenPermissionEnable_ReturnTrue()
{
var mockUser = new Mock<User>();
mockUser.SetupGet(p => p.Permissions).Returns(
() => new List<Permission>
{
new Permission {Name = "Name", IsEnable = true}
});
var user = mockUser.Object;
var isContainPermission = user.ContainPermission("Name");
Assert.IsTrue(isContainPermission);
}
}
有效!测试方法通过。但我决定再检查一下。我更改了方法ContainPermission:
public bool ContainPermission(string permissionName)
{
Permissions.Clear();
var result = Permissions.Where(p => p.Name == permissionName && p.IsEnable).FirstOrDefault();
return result != null;
}
我的测试方法也通过了!我不明白为什么?我的代码出了什么问题?
答案 0 :(得分:0)
由于以下行,每当您要求权限时,您将始终获得结果:
mockUser.SetupGet(p => p.Permissions)
您可以通过编写另一个测试来测试您在集合为空时获得所需的结果,如下所示:
[TestMethod]
public void UserContainPermission_WhenNoPermissions_ReturnFalse()
{
var mockUser = new Mock<User>();
mockUser.SetupGet(p => p.Permissions).Returns(
() => new List<Permission>());
var user = mockUser.Object;
var isContainPermission = user.ContainPermission("Name");
Assert.IsFalse(isContainPermission);
}