我有 Junit5 和 Lombok 的原始 Spring-Boot 專案。我有一個簡單的課程:
public class Calculator {
public int subtract(int a, int b) {
return a - b;
}
}
并為它創建了測驗:
import lombok.AllArgsConstructor;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
@AllArgsConstructor
class CalculatorTest {
private final Calculator calculator;
private static final int SUBTRACTION_RESULT = 2;
@Test
void subtractTest() {
int result = calculator.subtract(5, 3);
assertEquals(result, SUBTRACTION_RESULT);
}
}
測驗失敗:
org.junit.jupiter.api.extension.ParameterResolutionException: No ParameterResolver registered for parameter [final com.udemy.junits.Calculator calculator] in constructor [public com.udemy.junits.CalculatorTest(com.udemy.junits.Calculator)].
據我了解,它無法初始化和實體化計算器。我嘗試在沒有 Lombok 的情況下執行此操作并添加了建構式:
public CalculatorTest(Calculator calculator) {
this.calculator = calculator;
}
有同樣的結果。然后我使用@BeforeAll 以這種方式實體化它:
@BeforeAll
static void init() {
calculator = new Calculator();
}
這行得通。依賴注入在這里不可用,因為我們沒有應用背景關系?還是我理解錯了?是否可以在這里執行依賴注入而不將計算器 var 實體化為new Calculator()?
uj5u.com熱心網友回復:
您的最終代碼塊是正確的并且是標準做法,您不需要此測驗類中的建構式用于Calculator實體。
對于測驗類,您應該定義欄位并在@BeforeAllor@BeforeEach方法中初始化它們。
在 JUnit 中為測驗類使用建構式是為引數化單元測驗保留的,這就是為什么您會收到錯誤訊息,指出您缺少ParameterResolver. 這將是一個使用建構式進行引數化測驗的示例:
public class Calculator {
public int subtract(int a, int b) {
return a - b;
}
}
@RequiredArgsConstructor
@RunWith(Parameterized.class)
class CalculatorTest {
private final int x;
private final int y;
private final int z;
private Calculator calculator;
// Constructor is generated by lombok with @RequiredArgsConstructor
// and accepts three parameters, x, y, and z
@BeforeEach
void setUp() {
calculator = new Calculator();
}
@Test
void testSubtract() {
assertEquals(z, calculator.subtract(x, y));
}
/**
* This method will pass each parameter into the constructor
* of this test class. In this case, the testSubtract method
* will be ran 4 times with each set of parameters.
*/
@Parameterized.Parameters
static Collection parameters() {
return Arrays.asList(
new Object[][] {
{5, 3, 2},
{10, 1, 9},
{120, 40, 80},
{1, 1, 0}
}
);
}
}
您可以在此處找到有關 JUnit 4 的引數化單元測驗和此處的 JUnit 5 的更多詳細資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/523570.html
標籤:爪哇弹簧靴junit5
