gpt4 book ai didi

java - JUnit如何设置测试类?

转载 作者:行者123 更新时间:2023-11-30 06:02:47 25 4
gpt4 key购买 nike

我使用测试类的构造函数来模拟对象。但我想为每个测试方法中模拟对象的 stub 设置参数。我尝试使用测试类的构造函数参数,但 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)
}
}

最佳答案

默认的 JUnit 4 运行器不提供此类功能:parameterized tests .
要使用它,您需要使用 Parameterized 运行器类来注释您的类,并定义一个 @Parameterized.Parameters 函数来设置每个场景的参数值。

例如:

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized::class)
class HelloTest(val param1: Int, val param2: Int) {

companion object {
@JvmStatic
@Parameterized.Parameters
fun data() = listOf(
arrayOf(1, 2),
arrayOf(1, 3)
)
}
@Test
fun `first test`() {
val sMock = setUpMock(param1, param2)
println(sMock.mock.get(1))
}

@Test
fun `second test`() {
val sMock = setUpMock(param1, param2)
println(sMock.mock.get(1))
verify(sMock.mock).get(1)
}
}

没有经过测试的代码,但您应该明白了。

关于java - JUnit如何设置测试类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53692877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com