{"id":809,"date":"2023-03-01T06:46:27","date_gmt":"2023-02-28T22:46:27","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=809"},"modified":"2023-04-05T17:32:20","modified_gmt":"2023-04-05T09:32:20","slug":"testng-parameterized-test","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/01\/testng-parameterized-test\/","title":{"rendered":"TestNG\u53c2\u6570\u5316\u6d4b\u8bd5"},"content":{"rendered":"<p>\u8f6f\u4ef6\u6d4b\u8bd5\u4e2d\uff0c\u7ecf\u5e38\u9700\u8981\u6d4b\u8bd5\u5927\u91cf\u7684\u6570\u636e\u96c6\u3002\u6d4b\u8bd5\u4ee3\u7801\u7684\u903b\u8f91\u5b8c\u5168\u4e00\u6837\uff0c\u53ea\u662f\u6d4b\u8bd5\u7684\u53c2\u6570\u4e0d\u4e00\u6837\u3002\u8fd9\u65f6\u6211\u4eec\u5c31\u9700\u8981\u4e00\u79cd\u201c\u4f20\u9012\u6d4b\u8bd5\u53c2\u6570\u7684\u673a\u5236\u201d\u3002\u907f\u514d\u5199\u91cd\u590d\u7684\u6d4b\u8bd5\u4ee3\u7801\u3002<\/p>\n<p>TestNG\u63d0\u4f9b\u4e862\u79cd\u4f20\u9012\u53c2\u6570\u7684\u65b9\u5f0f\uff1a<\/p>\n<p><!-- more --><\/p>\n<ul>\n<li>testng.xml\uff1a\u4f7f\u4ee3\u7801\u548c\u6d4b\u8bd5\u6570\u636e\u5206\u79bb\uff0c\u65b9\u4fbf\u7ef4\u62a4<\/li>\n<li>@DataProvider\uff1a\u80fd\u591f\u63d0\u4f9b\u6bd4\u8f83\u590d\u6742\u7684\u53c2\u6570\u3002(\u4e5f\u53ebdata-driven testing)<\/li>\n<\/ul>\n<h2>\u901a\u8fc7testng.xml\u4f20\u9012\u53c2\u6570\u7ed9\u6d4b\u8bd5\u4ee3\u7801<\/h2>\n<p>ParameterizedTest.java<\/p>\n<pre><code class=\"language-java\">package me.yezhou;\n\nimport org.testng.annotations.Parameters;\nimport org.testng.annotations.Test;\n\npublic class ParameterizedTest {\n\n    @Test\n    @Parameters(&quot;myName&quot;)\n    public void parameterTest(String myName) {\n        System.out.println(&quot;Parameterized value is : &quot; + myName);\n    }\n\n    @Test\n    @Parameters({ &quot;china&quot;, &quot;america&quot; })\n    public void parametersTest(String china, String america) {\n        System.out.println(&quot;china : &quot; + china + &quot;, america : &quot; + america);\n    }\n\n}<\/code><\/pre>\n<p>parameterized.xml<\/p>\n<pre><code class=\"language-xml\">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\n&lt;!DOCTYPE suite SYSTEM &quot;http:\/\/testng.org\/testng-1.0.dtd&quot; &gt;\n&lt;suite name=&quot;Suite&quot;&gt;\n    &lt;parameter name=&quot;myName&quot; value=&quot;Hello World!&quot; \/&gt;\n    &lt;test name=&quot;test&quot;&gt;\n        &lt;parameter name=&quot;myName&quot; value=&quot;AppBlog.CN&quot; \/&gt;\n        &lt;parameter name=&quot;myName&quot; value=&quot;Joe.Ye&quot; \/&gt;\n        &lt;parameter name=&quot;china&quot; value=&quot;\u4e2d\u56fd&quot; \/&gt;\n        &lt;parameter name=&quot;america&quot; value=&quot;\u7f8e\u56fd&quot; \/&gt;\n        &lt;classes&gt;\n            &lt;class name=&quot;me.yezhou.ParameterizedTest&quot;\/&gt;\n        &lt;\/classes&gt;\n    &lt;\/test&gt;\n&lt;\/suite&gt;<\/code><\/pre>\n<p>\u6d4b\u8bd5\u7ed3\u679c\uff1a<\/p>\n<pre><code>Parameterized value is : Joe.Ye\nchina : \u4e2d\u56fd, america : \u7f8e\u56fd\n\n===============================================\nSuite\nTotal tests run: 2, Failures: 0, Skips: 0\n===============================================<\/code><\/pre>\n<blockquote>\n<p>\u6ce8\u610f\u53c2\u6570\u8986\u76d6\u673a\u5236<\/p>\n<\/blockquote>\n<p>TestNG\u5bf9testng.xml\u4e2d\u53c2\u6570\u6307\u5b9a\u7684\u503c\u4f1a\u5c1d\u8bd5\u81ea\u52a8\u8fdb\u884c\u7c7b\u578b\u8f6c\u6362\uff0c\u4ee5\u4e0b\u662f\u652f\u6301\u7684\u7c7b\u578b\uff1a<\/p>\n<ul>\n<li>String<\/li>\n<li>int\/Integer<\/li>\n<li>boolean\/Boolean<\/li>\n<li>byte\/Byte<\/li>\n<li>char\/Character<\/li>\n<li>double\/Double<\/li>\n<li>float\/Float<\/li>\n<li>long\/Long<\/li>\n<li>short\/Short<\/li>\n<\/ul>\n<h2>\u901a\u8fc7DataProvider\u4f20\u9012\u53c2\u6570<\/h2>\n<h3>\u6848\u4f8b\u4e00\uff1a\u5b57\u7b26\u4e32\u7c7b\u578b\u4f20\u9012<\/h3>\n<pre><code class=\"language-java\">package me.yezhou;\n\nimport org.testng.annotations.DataProvider;\nimport org.testng.annotations.Test;\n\npublic class ParameterizedTest {\n\n    @DataProvider(name = &quot;user&quot;)\n    public Object[][] Users() {\n        return new Object[][]{\n                {&quot;root&quot;, &quot;passowrd&quot;},\n                {&quot;AppBlog.CN&quot;, &quot;123456&quot;},\n                {&quot;Android&quot;, &quot;iOS&quot;}\n        };\n    }\n\n    @Test(dataProvider = &quot;user&quot;)\n    public void verifyUser(String username, String password) {\n        System.out.println(&quot;Username: &quot; + username + &quot;, Password: &quot; + password);\n    }\n}<\/code><\/pre>\n<p>\u6d4b\u8bd5\u7ed3\u679c\uff1a<\/p>\n<pre><code>Username: root, Password: passowrd\nUsername: AppBlog.CN, Password: 123456\nUsername: Android, Password: iOS\n\n===============================================\nSuite\nTotal tests run: 3, Failures: 0, Skips: 0\n===============================================<\/code><\/pre>\n<h3>\u6848\u4f8b\u4e8c\uff1a\u6574\u6570\u548c\u5e03\u5c14\u7c7b\u578b\u4f20\u9012<\/h3>\n<p>\u5224\u65ad\u662f\u5426\u4e3a\u7d20\u6570\u7c7b\uff1aPrimeNumberChecker.java<\/p>\n<pre><code class=\"language-java\">package me.yezhou;\n\npublic class PrimeNumberChecker {\n    public Boolean validate(final Integer primeNumber) {\n        for (int i = 2; i &lt; (primeNumber \/ 2); i++) {\n            if (primeNumber % i == 0) {\n                return false;\n            }\n        }\n        return true;\n    }\n}<\/code><\/pre>\n<p>\u6d4b\u8bd5\u7c7b\uff1aParameterizedTest.java<\/p>\n<pre><code class=\"language-java\">package me.yezhou;\n\nimport org.testng.Assert;\nimport org.testng.annotations.BeforeMethod;\nimport org.testng.annotations.DataProvider;\nimport org.testng.annotations.Test;\n\npublic class ParameterizedTest {\n\n    private PrimeNumberChecker primeNumberChecker;\n\n    @BeforeMethod\n    public void initialize() {\n        primeNumberChecker = new PrimeNumberChecker();\n    }\n\n    @DataProvider(name = &quot;numbers&quot;)\n    public static Object[][] primeNumbers() {\n        return new Object[][]{{2, true}, {6, false}, {19, true},\n                {22, false}, {23, true}};\n    }\n\n    \/\/ This test will run 5 times since we have 5 parameters defined\n    @Test(dataProvider = &quot;numbers&quot;)\n    public void testPrimeNumberChecker(Integer inputNumber, Boolean expectedResult) {\n        System.out.println(inputNumber + &quot;: &quot; + expectedResult);\n        Assert.assertEquals(expectedResult, primeNumberChecker.validate(inputNumber));\n    }\n}<\/code><\/pre>\n<p>\u6d4b\u8bd5\u7ed3\u679c\uff1a<\/p>\n<pre><code>2: true\n6: false\n19: true\n22: false\n23: true\n\n===============================================\nSuite\nTotal tests run: 5, Failures: 0, Skips: 0\n===============================================<\/code><\/pre>\n<h3>\u6848\u4f8b\u4e09\uff1a\u5bf9\u8c61\u4f20\u9012<\/h3>\n<p>\u5bf9\u8c61Bean\uff1aPerson.java<\/p>\n<pre><code class=\"language-java\">package me.yezhou;\n\npublic class Person {\n    private String name;\n    private int age;\n\n    public Person(String name, int age) {\n        this.name = name;\n        this.age = age;\n    }\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public int getAge() {\n        return age;\n    }\n\n    public void setAge(int age) {\n        this.age = age;\n    }\n\n    @Override\n    public String toString() {\n        return &quot;Person{&quot; +\n                &quot;name=&#039;&quot; + name + &#039;\\&#039;&#039; +\n                &quot;, age=&quot; + age +\n                &#039;}&#039;;\n    }\n}<\/code><\/pre>\n<p>\u6d4b\u8bd5\u7c7b\uff1aParameterizedTest.java<\/p>\n<pre><code class=\"language-java\">package me.yezhou;\n\nimport org.testng.annotations.DataProvider;\nimport org.testng.annotations.Test;\n\npublic class ParameterizedTest {\n\n    @DataProvider(name = &quot;persons&quot;)\n    public static Object[][] persons() {\n        return new Object[][] { { new Person(&quot;Joe.Ye&quot;, 30) }, { new Person(&quot;AppBlog.CN&quot;, 2) } };\n    }\n\n    @Test(dataProvider = &quot;persons&quot;)\n    public void testMethod(Person person) {\n        System.out.println(person.toString());\n    }\n\n}<\/code><\/pre>\n<p>\u6d4b\u8bd5\u7ed3\u679c\uff1a<\/p>\n<pre><code>Person{name=&#039;Joe.Ye&#039;, age=30}\nPerson{name=&#039;AppBlog.CN&#039;, age=2}\n\n===============================================\nSuite\nTotal tests run: 2, Failures: 0, Skips: 0\n===============================================<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u8f6f\u4ef6\u6d4b\u8bd5\u4e2d\uff0c\u7ecf\u5e38\u9700\u8981\u6d4b\u8bd5\u5927\u91cf\u7684\u6570\u636e\u96c6\u3002\u6d4b\u8bd5\u4ee3\u7801\u7684\u903b\u8f91\u5b8c\u5168\u4e00\u6837\uff0c\u53ea\u662f\u6d4b\u8bd5\u7684\u53c2\u6570\u4e0d\u4e00\u6837\u3002\u8fd9\u65f6\u6211\u4eec\u5c31\u9700\u8981\u4e00\u79cd\u201c\u4f20\u9012\u6d4b [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[224],"tags":[],"class_list":["post-809","post","type-post","status-publish","format-standard","hentry","category-testng"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/809","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=809"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/809\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=809"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=809"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=809"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}