我使用测试类的构造函数来模拟对象 . 但我想为每个测试方法中的存根模拟对象设置参数 . 我尝试使用测试类的构造函数参数,但JUnit限制了这个:
java.lang.Exception: Test class should have exactly one public zero-argument constructor
我应该为此目的使用什么?
现在我使用不同的类来存储模拟,它看起来不太好看
package testci
import org.junit.Test
import org.mockito.Mockito.*
interface Object {
fun get(p: Int): Int
}
class setUpMock(val param: Int, val param2: Int) {
val mock = mock(Object::class.java)!!
init {
`when`(mock.get(param)).thenReturn(param2)
}
}
class HelloTest {
@Test
fun `first test`() {
val sMock = setUpMock(1,2)
println(sMock.mock.get(1))
}
@Test
fun `second test`() {
val sMock = setUpMock(1,3)
println(sMock.mock.get(1))
verify(sMock.mock).get(1)
}
}
2 回答
默认的JUnit 4运行器不提供此类功能:parameterized tests .
要使用它,您需要使用
Parameterized
runner类注释您的类,并定义一个@Parameterized.Parameters
函数来设置每个场景的参数值 .例如 :
没有经过测试的代码,但您应该明白这一点 .
使用Junit5,您可以在没有额外课程的情况下实现它 .
注意
@CsvSource
用于参数化测试 . 有几种方法writing parameterized tests with junit5.需要以下依赖项 .