为什么当 运行 bazel 测试 java_test 规则时 Bazel 找不到我的测试 class?
Why can't Bazel find my test class when running bazel test on a java_test rule?
我在 src/handlers/MyHttpHandlerTest.java
中定义了一个测试 class(抱歉,我知道最好将测试放在 tests
目录中)。
这是我的 src/handlers/BUILD
文件:
java_test(
name = "MyHttpHandlerTest",
srcs = [
"MyHttpHandler.java",
"MyHttpHandlerTest.java",
],
deps = [
"//:java_test_deps",
"//src/messages",
],
)
我的测试 class 在 src/handlers/MyHttpHandlerTest.java
中定义如下(它目前没有声明任何东西——我只是想测试我安装的 junit 和 Mockito):
package src.handlers;
import com.sun.net.httpserver.HttpExchange;
import src.messages.Message;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.when;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.io.IOException;
@ExtendWith(MockitoExtension.class)
public class MyHttpHandlerTest {
@Mock
Message message;
@Mock
HttpExchange exchange;
@Test
public void testGetMessage() throws IOException {
MyHttpHandler handler = new MyHttpHandler();
when(message.getMessage()).thenReturn("Hello world!");
handler.setMessage(message);
handler.handle(exchange);
}
}
当我运行bazel test //src/handlers:MyHttpHandlerTest
时,它成功编译了源文件,但是returns错误:
Class not found: [handlers.MyHttpHandlerTest]
为什么 bazel 找不到这个 class?
Bazel 猜测 Java 包层次结构的根是 src
文件夹,因此尝试加载 handlers.MyHttpHandlerTest
。因此,要么将包实际更改为 handlers
,要么使用 test_class
属性覆盖 Bazel 的启发式算法:
java_test(
name = "MyHttpHandlerTest",
srcs = [
"MyHttpHandler.java",
"MyHttpHandlerTest.java",
],
deps = [
"//:java_test_deps",
"//src/messages",
],
test_class = "src.handlers.MyHttpHandlerTest",
)
我在 src/handlers/MyHttpHandlerTest.java
中定义了一个测试 class(抱歉,我知道最好将测试放在 tests
目录中)。
这是我的 src/handlers/BUILD
文件:
java_test(
name = "MyHttpHandlerTest",
srcs = [
"MyHttpHandler.java",
"MyHttpHandlerTest.java",
],
deps = [
"//:java_test_deps",
"//src/messages",
],
)
我的测试 class 在 src/handlers/MyHttpHandlerTest.java
中定义如下(它目前没有声明任何东西——我只是想测试我安装的 junit 和 Mockito):
package src.handlers;
import com.sun.net.httpserver.HttpExchange;
import src.messages.Message;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.when;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.io.IOException;
@ExtendWith(MockitoExtension.class)
public class MyHttpHandlerTest {
@Mock
Message message;
@Mock
HttpExchange exchange;
@Test
public void testGetMessage() throws IOException {
MyHttpHandler handler = new MyHttpHandler();
when(message.getMessage()).thenReturn("Hello world!");
handler.setMessage(message);
handler.handle(exchange);
}
}
当我运行bazel test //src/handlers:MyHttpHandlerTest
时,它成功编译了源文件,但是returns错误:
Class not found: [handlers.MyHttpHandlerTest]
为什么 bazel 找不到这个 class?
Bazel 猜测 Java 包层次结构的根是 src
文件夹,因此尝试加载 handlers.MyHttpHandlerTest
。因此,要么将包实际更改为 handlers
,要么使用 test_class
属性覆盖 Bazel 的启发式算法:
java_test(
name = "MyHttpHandlerTest",
srcs = [
"MyHttpHandler.java",
"MyHttpHandlerTest.java",
],
deps = [
"//:java_test_deps",
"//src/messages",
],
test_class = "src.handlers.MyHttpHandlerTest",
)