Я реализовал программу с шаблоном стратегии. Поэтому у меня есть интерфейс, который используется в некоторых местах, и конкретная реализация может быть заменена.
Теперь я хочу протестировать эту программу. Я хотел бы сделать это аналогичным образом. Напишите один раз тест, который проверяет интерфейс. Конкретная реализация интерфейса должна быть введена в начале теста, чтобы я мог легко ее заменить.
Мой тестовый класс выглядит примерно так:
public class MyTestClass {
private StrategeyInterface strategy;
public MyTestClass(StrategeyInterface strategy) {
this.strategy = strategy;
}
....test methods using the strategy.
}
Параметризованный конструктор должен использоваться для внедрения конкретной стратегии в начале испытаний.
Теперь я не получил TestNG, чтобы запустить его и внедрить конкретный экземпляр реализации. Я пробовал несколько способов с наследованием, @DataProvider
, @Factory
и соответствующих методов, но без удачи.
Вот что говорится в отчете testNG:
Can't invoke public void MyClass.myTestMethod(): either make it static or add a no-args constructor to your class
Я использую плагин maven surefire для запуска тестов. Вот соответствующая часть pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</build>
Как мне написать и запустить тесты, добавив конкретную реализацию в класс теста?
Заранее спасибо.
P.S. Я мог бы доставить больше кода, который я пытался. Я еще не опубликовал это здесь, потому что я пробовал так много вариантов, что я сейчас немного растерялся, и все они провалились.