这是我在JUnit的第一天。我试着用参数做测试。我有密码:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import static org.junit.Assert.assertEquals;
@RunWith(JUnitParamsRunner.class)
public class MoneyParameterizedTest {
private static final Object[] getMoney() {
return new Object[] {
new Object[] {10, "USD"},
new Object[] {20, "EUR"}
};
}
@Test
@Parameterized.Parameters(method = "getMoney")
public void constructorShouldSetAmountAndCurrency(
int amount, String currency) {
Money money = new Money(amount, currency);
assertEquals(amount, money.getAmount());
assertEquals(currency, money.getCurrency());
}
}
IntelliJ告诉我:不能解析符号JUnitParamsRunner和方法。进口有问题吗?我正在测试的课程都在同一个包里。
-编辑
我将JunitParamsrunner.class改为Parameterized.class,这是可以的,但是Parametrized.Parameters中的符号'method‘的问题是一样的。
发布于 2016-09-07 12:32:05
JUnitParams
(许可Apache 2.0)是一个单独的库,这意味着它不是随JUnit一起提供的。这也意味着您需要确保它在项目的类路径中。如果您使用的是maven (或类似的东西),那么它非常容易,您只需将其作为依赖项添加到pom中,并确保IJ已经获取更改(如果它显示右上角的弹出,则自动或手动):
<dependency>
<groupId>pl.pragmatists</groupId>
<artifactId>JUnitParams</artifactId>
<version>1.0.5</version>
<scope>test</scope>
</dependency>
否则,自己下载 (单击Download ( JAR )
链接)并将其放到类路径中。
请注意,尽管概念相似,但Parameterized
与JUnitParams
不同,后者试图简化和改进编写参数化JUnit测试的方式。
P.S.:还有一个名为Zohhak
的库,它看起来比JUnitParams
更灵活,但它是在LGPL 3.0
下发布的,因此它取决于您的许可限制。
发布于 2017-11-06 18:18:26
下面是一个应该有效的例子:
import junitparams.JUnitParamsRunner;
import org.junit.Test;
import org.junit.runner.RunWith;
//import org.junit.runners.Parameterized.Parameters;
import static org.junit.Assert.assertEquals;
import junitparams.Parameters;
@RunWith(JUnitParamsRunner.class)
public class MoneyTest {
private final static int VALID_AMOUNT = 5;
private final static String VALID_CURRENCY = "USD";
private static final Object[] getInvalidAmount() {
return new Integer[][] {{-12387}, {-5}, {-1}};
}
@Test(expected = IllegalArgumentException.class)
@Parameters(method = "getInvalidAmount")
public void constructorShouldThrowIAEForInvalidAmount(int invalidAmount){
new Money(invalidAmount, VALID_CURRENCY);
}
private static final Object[] getInvalidCurrency(){
return new String[][]{{null}, {""}};
}
@Test(expected = IllegalArgumentException.class)
@Parameters(method = "getInvalidCurrency")
public void constructorShouldThrowIAEForInvalidCurrency(String invalidCurrency){
new Money(VALID_AMOUNT, invalidCurrency);
}
private static final Object[] getMoney() {
return new Object[] {
new Object[] {10, "USD"},
new Object[] {20, "EUR"}
};
}
@Test
@Parameters(method = "getMoney")
public void constructorShouldSetAmountAndCurrency(
int amount, String currency) {
Money money = new Money(amount, currency);
assertEquals(amount, money.getAmount());
assertEquals(currency, money.getCurrency());
}
}
发布于 2020-08-18 14:15:38
你的POM.xml应该喜欢这个..。
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
<groupId>groupId</groupId>
<artifactId>JUnit</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>pl.pragmatists</groupId>
<artifactId>JUnitParams</artifactId>
<version>1.0.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>pl.pragmatists</groupId>
<artifactId>JUnitParams</artifactId>
<version>1.0.5</version>
<scope>compile</scope>
</dependency>
</dependencies>
https://stackoverflow.com/questions/39366130
复制相似问题