Вы можете использовать groups
и dependsOnGroups
в аннотации TestNG @Test
, как описано в предыдущих ответах.
Тем не менее, оба класса должны быть под одним и тем же <test>
.
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite" verbose="1" >
<test name="Test" >
<classes>
<class name="c1" />
<class name="c2" />
</classes>
</test>
</suite>
Следующее приведет к исключению при запуске набора тестов.
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1" >
<test name="Test1" >
<classes>
<class name="c1" />
</classes>
</test>
<test name="Test2">
<classes>
<class name="c2" />
</classes>
</test>
</suite>
Я бы изменил имя класса интерфейса.
class ServiceClientInterface {};
Затем поместил конкретные реализации в отдельные пространства имен:
namespace MyService
{
class Client: public ServiceClientInterface {};
}
namespace MyServiceTest
{
class TestClient: public ServiceClientInterface {};
}
Или что-то совершенно другое.
PS. Я использую полные имена. Мне не нравится короткое «я» - это интерфейс. Ваш вкус может отличаться.
Обычно я резервирую "Impl" для идиомы pimpl . Я использую полный «Интерфейс» для абстрактных базовых классов. Для конкретных реализаций удалите интерфейс и префикс с указанием специализации:
class ServiceClientInterface {
// some pure virtual methods
};
class XMLServiceClient {
// Or whatever "service" it is
};
class TestServiceClient {
// some well defined
};
ServiceClientInterface / ServiceClient или ServiceClient / ServiceClientImpl. Остальные кажутся слишком искусственными.
ServiceClientImpl
имеет для меня наибольший смысл. Это тот, который наиболее четко сообщает вам то, что вам нужно знать. Что это реализация за ServiceClient.
"Стандартный" и "Базовый" ничего полезного вам не скажут. Есть еще нестандартный ServiceClient? Что именно стандартно в этом? Он соответствует какому-то стандарту ISO или как? И Basic звучит так, как будто есть и "Advanced" версия.
"Concrete" может сработать, мне просто никогда не нравилась эта терминология.