繁体   English   中英

单元测试返回布尔值的方法

[英]Unit test a method that returns a boolean

我有这样的方法:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM