单元测试返回布尔值的方法
本文关键字:方法 布尔值 返回 单元测试 | 更新日期: 2023-09-27 17:51:02
我有一个这样的方法:
public bool CheckForRuleName(string ruleName, string studentId)
{
var rules =
_noSqlProvider.GetDocumentsByQuery<StudentRule>(string.Format(GET_Student_BASED_ON_RULENAME, ruleName, studentId));
if (rules.Count() != 0)
{
return true;
}
return false;
}
写一个这样的单元测试:
[TestMethod]
public void when_calling_CheckForRuleName_Should_Return_FALSE_WHEN_RULE_DOES_NOT_EXIST()
{
var noSqlProv = new Mock<INoSqlProvider<Document, DocumentCollection>>();
noSqlProv.Setup(x => x.GetDocumentsByQuery<StudentRule>(It.IsAny<string>()));
var rulesRepository = new RulesRepository(noSqlProv.Object);
bool rules = rulesRepository.CheckForRuleName("test123","testrule");
Assert.AreEqual(false, rules);
}
测试失败,出现以下异常:
ArgumentNullException: Value cannot be null.
Parameter name: source
现在GetDocumentsByQuery方法需要一个像这样的SQL字符串:
"select j from json j where j.name='{0}' and j.studentid='{1}'"
它查询DocumentDb,只是为了完成问题。因为查询实际的Db不是一个好的做法,所以我使用:
It.IsAny<string>()
我是单元测试的新手,所以有人能就如何对这种类型的代码进行单元测试提供指导吗?
提前感谢。
问候。
您的存根方法不返回任何值,因此它默认返回null
。向return子句添加规则的存根列表。如果你想让它返回false,那么它必须是一个空集合。
var stubbedRules = new StudentRule[0];
noSqlProv.Setup(x => x.GetDocumentsByQuery<StudentRule>(It.IsAny<string>())).Returns(stubbedRules);