我在此之前已经意识到这个问题 - > 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();
}
}
包/目录树:
问题:
我尝试了什么:
任何人都知道如何让它发挥作用?
答案 0 :(得分:1)
您的sources目录和包是错误的。
您为生产代码选择了src/main/java
的Maven默认源目录结构,为测试代码选择了src/test/java
。您应该将这两个目录声明为IntelliJ中的源文件夹(项目结构 - >模块 - >选择文件夹,然后单击src/main/java
的来源和src/test/java
的测试)
您的包裹应该相同:com.simpleproject
。问题是您已声明了2个不同的包(main.java.com.simpleproject
和test.java.com.simpleproject
),这就是您无法调用受保护方法的原因。
无法从相同或不同的包调用私有方法。你必须使用反射。但最好至少应该保护您的方法或默认包。
您的测试应使用JUnit,而不是主方法。类似的东西:
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);
}
}