2015-05-28 3 views
0

У меня есть метод, как это:блок тестирования метод, который возвращает логическое значение

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

Я новичок в модульное тестирование, так может кто-то пожалуйста, дать указания о том, как блок тестирования данного типа кода.

Заранее спасибо.

С уважением.

+0

Как и в сторону, это, как правило, плохая идея 'Count()', если все, что вы хотите, чтобы проверить это существование - если возможно, использовать 'Any' или какой-то логический эквивалент, который сообщит успех, как только * один * объект найден. –

ответ

4

Ваш загершенный метод не возвращает никакого значения, поэтому он по умолчанию возвращает null. Добавьте в предложение возврата заглушку списка правил. Если вы хотите, чтобы он возвращал false, это была бы пустая коллекция.

var stubbedRules = new StudentRule[0]; 
noSqlProv.Setup(x => x.GetDocumentsByQuery<StudentRule>(It.IsAny<string>())).Returns(stubbedRules); 
+0

Тим, который был опечаткой. Исправил его сейчас. – Codehelp

+0

ОК. Отредактировал ответ, чтобы показать следующую проблему. –

Смежные вопросы