我意识到这个问题之前已经被问过 -> How to create a test directory in Intellij 13?
但是,答案对我不起作用,我不明白为什么......
Intellij 版本:
IntelliJ IDEA 2016.1.4
Build #IC-145.2070, built on August 2, 2016
JRE: 1.8.0_77-b03 x86
JVM: Java HotSpot(TM) Server VM by Oracle Corporation
MyApp.java
package main.java.com.simpleproject;
public class MyApp {
private int updNum;
public MyApp(int givenNum){
this.updNum = givenNum;
}
private void updateNumPlusTwo(){
this.updNum += 2;
}
protected int getUpdatedNum(){
return this.updNum;
}
}
MyAppTest.java
package test.java.com.simpleproject;
import main.java.com.simpleproject.MyApp;
public class MyAppTest {
public static void main(String[] args) {
MyApp app = new MyApp(4);
app.getUpdatedNum();
app.updateNumPlusTwo();
}
}
包/目录树:
问题:
我尝试过的:
有人知道如何让它发挥作用吗?
最佳答案
您的源目录和包是错误的。
您已为生产代码选择了 Maven 默认源目录结构
src/main/java
,为测试代码选择了src/test/java
。您应该将这两个目录声明为 IntelliJ 中的源文件夹(项目结构 -> 模块 -> 选择文件夹并单击src/main/java
的“源”和src/test/java< 的测试
)您的包应该相同:
com.simpleproject
。问题是您声明了 2 个不同的包(main.java.com.simpleproject
和test.java.com.simpleproject
),这就是您无法调用 protected 方法的原因。无法从相同或不同的包中调用私有(private)方法。为此,您必须使用反射。但最好至少应该将您的方法设置为 protected 或默认包。
您的测试应该使用 JUnit,而不是 main 方法。像这样的东西:
package com.simpleproject; import static org.assertj.core.api.Assertions.assertThat; public class Test { @Test public void shouldTestMyClass() { // Given int givenNum = 3; // When MyApp myApp = new MyApp(givenNum); myApp.updateNumPlusTwo(); // Then (use AssertJ library for example) assertThat(myApp.getUpdatedNum()).isEqualTo(5); } }
关于java - 使用 Intellij 在不同的包中编写单元测试调用私有(private)/ protected 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49340188/