Мой текущий способ организации модульных тестов сводится к следующему:
BusinessLayer
есть тестовый проект BusinessLayer.UnitTests
.CustomerRepository
из пространства имен BusinessLayer.Repositories
существует тестовый класс CustomerRepositoryTests
в пространстве имен BusinessLayerUnitTests.Repositories
.Методы в каждом тестовом классе следуют простому соглашению об именах MethodName_Condition_ExpectedOutcome
. Таким образом, класс CustomerRepositoryTests
, содержащий тесты для класса CustomerRepository
с определенным методом Get
, выглядит следующим образом:
[TestFixture]
public class CustomerRepositoryTests
{
[Test]
public void Get_WhenX_ThenRecordIsReturned()
{
//...
}
[Test]
public void Get_WhenY_ThenExceptionIsThrown()
{
//...
}
}
Этот подход сослужил мне хорошую службу, потому что он действительно упрощает поиск тестов для некоторого фрагмента кода. На противоположном сайте это делает рефакторинг кода действительно более сложным, чем должен быть :
Есть ли какой-нибудь умный способ организации модульных тестов, который по-прежнему позволял бы мне быстро находить тесты для определенного кода и в то же время поддаваться рефакторингу?
В качестве альтернативы, есть ли какое-то, ну, возможно, расширение Visual Studio, которое позволило бы мне каким-то образом сказать, что "Эй,эти тесты предназначены для того метода, поэтому, когда название метода изменится, будьте так добры, измените и тесты тоже"? Честно говоря, я серьезно подумываю написать что-нибудь сам такой:)