【訳】TestNG公式文書中国語版(08)——試験方法、試験類と試験グループ(5.13-5.20)
23260 ワード
5.13-プログラム化運転TestNG
TestNGのテストをプログラムで簡単に呼び出すことができます.
TestListenerAdapter tla = new TestListenerAdapter();
TestNG testng = new TestNG();
testng.setTestClasses(new Class[] { Run2.class });
testng.addListener(tla);
testng.run();
この例ではTestNGオブジェクトを作成し、テストクラスRun 2を実行します.TestListenerが追加されました(これはリスナーです).アダプタクラスorgも使用できます.testng.TestListenerAdapterが行う、orgを実現することもできる.testng.ITestListenerインタフェース.このインタフェースには、テストがいつ開始されるか、成功したか、失敗したかなど、さまざまなコールバック方法が含まれています.
似たようなものはtestngを使ってもいいです.xmlファイル呼び出しまたは仮想testngを作成します.xmlファイルを呼び出します.そのため、このパッケージorgを使用することができます.testng.xmlのクラス:XmlClass、XmlTestなど.各クラスはxmlで対等なラベルに対応しています.
たとえば、次のような仮想ファイルを作成するとします.
<suite name="TmpSuite" >
<test name="TmpTest" >
<classes>
<class name="test.failures.Child" />
<classes>
</test>
</suite>
次のコードを使用する必要があります.
XmlSuite suite = new XmlSuite();
suite.setName("TmpSuite");
XmlTest test = new XmlTest(suite);
test.setName("TmpTest");
List<XmlClass> classes = new ArrayList<XmlClass>();
classes.add(new XmlClass("test.failures.Child"));
test.setXmlClasses(classes) ;
その後、このXmlSuiteをTestNGに伝えることができます.
List<XmlSuite> suites = new ArrayList<XmlSuite>();
suites.add(suite);
TestNG tng = new TestNG();
tng.setXmlSuites(suites);
tng.run();
完全なAPIについては、JavaDocsを参照してください.
5.14-BeanShell上級グループでの選択
<test name="BeanShell test">
<method-selectors>
<method-selector>
<script language="beanshell"><![CDATA[
groups.containsKey("test1")
]]></script>
</method-selector>
</method-selectors>
<!-- ... -->
testngでxmlファイルに
次に、BeanShellスクリプトの追加説明を示します.
5.15 - 注解转换器
TestNGでは、実行時にすべての注釈の内容を変更できます.ソースコードに注釈を付けると、ほとんどの場合、正常に動作する場合に役立ちます(この原文はこの意味で、あまり違和感があります).しかし、いくつかの場合、値を変更する可能性があります.
そのため、注釈変換器(Annotation Transformer)を使用します.
注釈変換器とは、次のインタフェースを実現するクラスです.
public interface IAnnotationTransformer {
/**
* This method will be invoked by TestNG to give you a chance
* to modify a TestNG annotation read from your test classes.
* You can change the values you need by calling any of the
* setters on the ITest interface.
*
* Note that only one of the three parameters testClass,
* testConstructor and testMethod will be non-null.
*
* @param annotation The annotation that was read from your
* test class.
* @param testClass If the annotation was found on a class, this
* parameter represents this class (null otherwise).
* @param testConstructor If the annotation was found on a constructor,
* this parameter represents this constructor (null otherwise).
* @param testMethod If the annotation was found on a method,
* this parameter represents this method (null otherwise).
*/
public void transform(ITest annotation, Class testClass,
Constructor testConstructor, Method testMethod);
}
他のTestNGリスナーのように、コマンドラインまたはantでこのクラスを指定できます.
java org.testng.TestNG -listener MyTransformer testng.xml
またはプログラムでは、
TestNG tng = new TestNG();
tng.setAnnotationTransformer(new MyTransformer());
// ...
transform()を呼び出すと、ITest testパラメータの設定方法を呼び出して、さらに処理する前に値を変更できます.
たとえば、ここではプロパティinvocationCountの値を上書きする方法を示しますが、テストクラスのinvoke()メソッドのみが影響を受けます.
public class MyTransformer implements IAnnotationTransformer {
public void transform(ITest annotation, Class testClass,
Constructor testConstructor, Method testMethod)
{
if ("invoke".equals(testMethod.getName())) {
annotation.setInvocationCount(5);
}
}
}
IAnnotationTransformerでは、@Test注記を1つだけ変更できます.他の(注釈@Factoryまたは@DataProviderを構成すると仮定)を変更する必要がある場合は、IAnnotationTransformer 2を使用します.
5.16 - 方法拦截器
TestNGがテストメソッドをどのような順序で呼び出すかを計算すると、これらのメソッドは2つのグループに分けられます.
2番目のカテゴリをよりよく制御するために、TestNGは次のインタフェースを定義します.
public interface IMethodInterceptor {
List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context);
}
メソッドでmethodsと呼ばれるリストパラメータには、不定序で実行されるすべてのメソッドが含まれています.あなたのinterceptメソッドもIMethodInstanceリストを返します.次のいずれかの場合があります.
java -classpath "testng-jdk15.jar:test/build" org.testng.TestNG -listener test.methodinterceptors.NullMethodInterceptor /
-testclass test.methodinterceptors.FooTest
antで対応する構文については、listenersプロパティantドキュメントの説明を参照してください.
たとえば、次のメソッドブロッカーはメソッドを並べ替え直し、「fast」グループのメソッドは常に先に実行されます.
public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
List<IMethodInstance> result = new ArrayList<IMethodInstance>();
for (IMethodInstance m : methods) {
Test test = m.getMethod().getMethod().getAnnotation(Test.class);
Set<String> groups = new HashSet<String>();
for (String group : test.groups()) {
groups.add(group);
}
if (groups.contains("fast")) {
result.add(0, m);
}
else {
result.add(m);
}
}
return result;
}
5.17 - 从JavaDoc 注解迁移到JDK 注解
プロジェクトがjavadoc annotationsを使用していたが、その後JDK annotationsに変換する場合は、これらをすべて変換する必要があります.
TestNGはこれらを手伝ってくれるツールを提供しています.
java org.testng.AnnotationConverter -srcdir directory [-overwrite|-d destdir] [-quiet]
上記のコマンドは、ソースファイルを1つのフォーマットから別のフォーマットに変換します.パラメータなしで実行すると、すべてのパラメータの使用方法が表示されます.
変換後のファイルは、あまりきれいではないかもしれませんので、正確性を確認してください.だからバージョン管理ツールを使ったほうがいいです.好きでなければ操作を取り消すことができます.変換器自体も、上記の推奨文法規則を使用していると仮定します.
5.18 - TestNG 监听器
TestNGの動作を修正するためのインタフェースがたくさんあります.これらのインタフェースは、総称して「TestNGリスナー」と呼ばれています.次に、現在サポートされているListenerのリストを示します.
これらのインタフェースを実現すると、TestNGにこれらのインタフェースを知ることができます.以下の方法があります.
次に、3つ目の方法の例を示します.
<suite>
<listeners>
<listener class-name="com.example.MyListener" />
<listener class-name="com.example.MyMethodInterceptor" />
</listeners>
...
5.19 - 依赖注入
TestNGでは、自分の方法で追加のパラメータを宣言できます.この場合、TestNGはこれらのパラメータに正しい値を自動的に入力します.依存注入はこのような場所で使用されます.
5.20 - 监听方法调用
TestNGがテスト(@Test注釈によって呼び出される)または構成(@Before or@After注釈を使用する方法)を呼び出すたびに、Listener IinvokedMethodListenerは通知を得ることができます.次のインタフェースを実現する必要があります.
public interface IInvokedMethodListener extends ITestNGListener {
void beforeInvocation(IInvokedMethod method, ITestResult testResult);
void afterInvocation(IInvokedMethod method, ITestResult testResult);
}
さらにTestNGリスナーについての節で議論したように,1つのリスナーとして宣言する.