Ste*_*eph 25 junit nunit unit-testing testcase testcaseattribute
我已经搜索了JUnit测试用例,它提出了一些看起来实现起来要复杂得多的东西 - 你必须创建一个扩展测试用例然后调用的新类:
public class MathTest extends TestCase {
protected double fValue1;
protected double fValue2;
protected void setUp() {
fValue1= 2.0;
fValue2= 3.0;
}
}
public void testAdd() {
double result= fValue1 + fValue2;
assertTrue(result == 5.0);
}
Run Code Online (Sandbox Code Playgroud)
但我想要的是非常简单的东西,比如NUnit测试用例
[TestCase(1,2)]
[TestCase(3,4)]
public void testAdd(int fValue1, int fValue2)
{
double result= fValue1 + fValue2;
assertIsTrue(result == 5.0);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在JUnit中这样做?
Sou*_*man 12
2017更新: JUnit 5将通过junit-jupiter-params扩展包括参数化测试.文档中的一些示例:
原始类型的单个参数(@ValueSource):
@ParameterizedTest
@ValueSource(strings = { "Hello", "World" })
void testWithStringParameter(String argument) {
assertNotNull(argument);
}
Run Code Online (Sandbox Code Playgroud)
逗号分隔值(@CsvSource)允许指定类似于以下JUnitParams的多个参数:
@ParameterizedTest
@CsvSource({ "foo, 1", "bar, 2", "'baz, qux', 3" })
void testWithCsvSource(String first, int second) {
assertNotNull(first);
assertNotEquals(0, second);
}
Run Code Online (Sandbox Code Playgroud)
其他来源注释包括@EnumSource,@MethodSource,@ArgumentsSource和@CsvFileSource,看到文档的详细信息.
原始答案:
JUnitParams(https://github.com/Pragmatists/JUnitParams)似乎是一个不错的选择.它允许您将测试参数指定为字符串,如下所示:
@RunWith(JUnitParamsRunner.class)
public class MyTestSuite {
@Test
@Parameters({"1,2", "3,4"})
public testAdd(int fValue1, int fValue2) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以通过单独的方法,类或文件指定参数,有关详细信息,请参阅JUnitParamsRunner api文档.
All*_*lan 11
显然,正确答案是"不,没有等价物".那太可悲了.
JUnit参数化测试和理论(如此处和JUnit中所述 - 如何测试具有不同值的方法?)两者都可以完成工作,但几乎没有干净.他们写作很难读,也很难阅读.
我希望有一天JUnit可以添加更简单,类似NUnit的语法.似乎不应该那么困难; 虽然也许需要lambdas?
你可以使用zohhak获得带参数的junit
用法示例:
@RunWith(ZohhakRunner.class)
public class HelloWorldTest {
@TestWith({
"2, 1, 3",
"3, 5, 8"
})
public void should_add_numbers(int addend1, int addend2, int result) {
assertThat(addend1 + addend2).isEqualTo(result);
}
}
Run Code Online (Sandbox Code Playgroud)
这很愚蠢,但这是我最终的解决方法。使用 4 行代替 1 行。
@Test
public void testAdd1() {
testAdd(1,2);
}
@Test
public void testAdd2() {
testAdd(3,4);
}
private void testAdd(int fValue1, int fValue2)
{
double result= fValue1 + fValue2;
assertIsTrue(result == 5.0);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4716 次 |
| 最近记录: |