Рассмотрим этот класс:
public class Content
{
public virtual bool IsCheckedOut {get; private set;}
public virtual void CheckOut()
{
IsCheckedOut = true;
}
public virtual void CheckIn()
{
//Do Nothing for now as demonstrating false positive test.
}
}
Метод Checkin намеренно пуст. Теперь у меня есть несколько тестовых методов для проверки статуса вызова каждого метода.
[TestMethod]
public void CheckOutSetsCheckedOutStatusToTrue()
{
Content c = new Content();
c.CheckOut();
Assert.AreEqual(true, c.IsCheckedOut); //Test works as expected
}
[TestMethod]
public void CheckInSetsCheckedOutStatusToFalse()
{
Content c = new Content();
c.CheckIn();
Assert.AreEqual(false, c.IsCheckedOut); //Test does not work as expected
}
2-й тест проходит по неправильным причинам. Итак, как я могу использовать mocking (moq), чтобы убедиться, что CheckIn устанавливает свойство IsCheckedOut?
Спасибо.
EDIT
Чтобы уточнить: у меня есть метод с именем CheckIn (), работа которого заключается в том, чтобы установить для состояния IsCheckedOut значение false.
В моем тестовом коде выше вы увидите, что Test вернет false, даже если я не установил значение свойства в false; Это ожидается, ничего страшного здесь.
Я думаю, что мой вопрос, в частности, заключается в следующем. Как проверить, что метод CheckIn () установил для свойства IsCheckedOut значение false? Это то, что я бы назвал поведенческой проверкой.
Я полагаю, что некоторые комментарии предложили сделать что-то, что равносильно проверке состояния? Если это так, я не верю, что есть какая-то ценность в насмешках над этой частью, когда мы можем просто использовать:
Content c = new Content();
c.CheckIn();
Assert.AreEqual(false, c.IsCheckedOut); //State verification
Конечно, я могу ошибаться, поэтому, пожалуйста, помогите мне прояснить эти понятия:)