Рассмотрим этот класс:
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
}
Второй тест проходит по неправильным причинам. Итак, как я могу использовать mocking (moq), чтобы проверить, что CheckIn устанавливает свойство IsCheckedOut?
Спасибо.
ИЗМЕНИТЬ
Чтобы уточнить: у меня есть метод, называемый CheckIn(), задачей которого является установить статус IsCheckedOut на false.
Вы увидите в моем тестовом коде выше, что Test вернет false, даже если я не установил значение свойства false; Ожидается, что здесь ничего плохого.
Я думаю, что мой вопрос конкретно: Как я могу проверить, что метод CheckIn() установил для свойства IsCheckedOut значение false? Это то, что я бы назвал поведенческой проверкой.
Я считаю, что некоторые из комментариев предлагают сделать что-то, что соответствует государственной проверке? Если это так, я не верю, что есть какая-либо ценность в том, чтобы насмехаться над этой частью вообще, когда мы можем просто использовать:
Content c = new Content();
c.CheckIn();
Assert.AreEqual(false, c.IsCheckedOut); //State verification
Конечно, я могу ошибаться, поэтому, пожалуйста, помогите мне прояснить эти понятия:)