Я делаю первые шаги в TDD (я изучаю «Профессиональную разработку через тестирование с C#» Бендера и МакВертера).
Я пытаюсь написать свое первое приложение с TDD: я предполагаю, что у меня есть класс DataService для управления сохранением. Я написал два пройденных теста, но думаю, что у меня нет смысла.
Это мой первый тест, я предполагаю, что могу создать экземпляр транзакции, что бы это ни значило в DataService
public void Begin_a_transaction_should_returns_true_when_is_all_ok()
{
Mock<IDataLayer> dataLayer = new Mock<IDataLayer>();
DataService sut = new DataService(dataLayer.Object);
bool expected = true;
dataLayer.Setup(dl => dl.BeginTransaction()).Returns(expected);
bool actual = sut.BeginTransaction();
Assert.AreEqual(expected, actual);
}
В соответствии с TDD теперь я написал классы, никаких проблем с этим
public class DataService
{
private IDataLayer _dataLayer;
public DataService(IDataLayer dataLayer)
{
this._dataLayer = dataLayer;
}
public bool BeginTransaction()
{
return _dataLayer.BeginTransaction();
}
}
Теперь я хочу написать второй тест: BeginTransaction должен завершиться неудачей, если транзакция уже существует, и я требую это для IDataLayer
[Test]
public void Begin_a_transaction_should_throws_exception_if_transaction_already_exists()
{
Mock<IDataLayer> dataLayer = new Mock<IDataLayer>();
DataService sut = new DataService(dataLayer.Object);
dataLayer.Setup(dl => dl.BeginTransaction()).Throws(new Exception("Transaction already exists"));
Assert.Throws<Exception>(() => sut.BeginTransaction());
}
А теперь суть: тесты проходят без написания какой-либо строки кода, потому что я издевался над BeginTransaction, чтобы вызвать исключение. Это может быть хорошо, потому что я протестирую это в реализации тестов IDataLayer, но если я все высмеиваю, тесты DataService полезны?