Главное преимущество создания одного класса испытаний на производственный класс состоит в том, что он прост и понятен. Если у вас есть Foo, вы точно знаете, что все модульные тесты для Foo всегда можно найти в FooTest (или независимо от того, что называет ваше соглашение об именах). Вы следуете соглашению об именах для имен классов модульных тестов, не так ли?)
Для удобства чтения я рекомендую вашей команде определить соглашение об именах, которое помогает идентифицировать тесты. Например, я могу назвать один из тестов FooTest::DoSomething_ensureNullPointerThrowsException()
. Таким образом, читатель знает не только тест Foo::DoSomething()
, но также знает, что он тестирует исключение нулевого указателя.
В целом, если что-то кажется «неправильным» или «трудно сделать»; если вы думаете, что было бы проще сделать что-то по-другому, потому что ваш проект просто не мешает тому, как это делают все остальные; это часто связано с нарушениями одного или нескольких принципов проектирования ОО. Взгляните глубоко на первопричину: почему я борюсь с проблемой X? Почему кто-то хочет получить один тестовый класс для каждого метода производства? Есть ли сто тестов для каждого метода, и разработчик считает, что изменение будет лучше сгруппировать их? Вероятная причина в том, что его методы несут слишком большую ответственность или слишком сложны. Если бы его методы были более простыми, он мог бы найти, пожалуй, всего пять или десять тестов для каждого метода.