Java Android上下文在测试时不会被嘲笑
在这种结构中测试Java Android上下文在测试时不会被嘲笑,java,android,unit-testing,junit,mockito,Java,Android,Unit Testing,Junit,Mockito,在这种结构中测试子类时遇到问题,我必须将活动的上下文下放到文件使用工具-类中,在该类中我编写和读取有关子类和超类状态的数据 public class FragmentA extends Fragment { SubClass = new SubClass(getActivity()); //Context from getActivity() } public class SubClass extends SuperClass { public SubClass(Context
子类
时遇到问题,我必须将活动
的上下文下放到文件使用工具
-类中,在该类中我编写和读取有关子类
和超类
状态的数据
public class FragmentA extends Fragment {
SubClass = new SubClass(getActivity()); //Context from getActivity()
}
public class SubClass extends SuperClass {
public SubClass(Context ctx) {
super(ctx);
line = "hello world";
//file doesn't exist yet even thought we have created File object in
//FileUsageTools constructor
if (!filer.file.exists()) {
filer.saveFile(this);
}
}
}
public class SuperClass {
String line;
public SuperClass(Context ctx) {
FileUsageTool filer = new FileUsageTool(ctx);
}
}
public class FileUsageTool {
Context context;
File file;
FileUsageTool(Context ctx) {
context = ctx;
file = new File(ctx.getFilesDir(), "asd.txt");
}
saveFile(SuperClass spr) {
PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(file)));
writer.println(spr.line);
writer.close();
}
}
在classFileUsageTool
中,我必须使用上下文来创建一个文件并对其进行写入<将在超类
和子类
中调用code>saveToFile
public class FragmentA extends Fragment {
SubClass = new SubClass(getActivity()); //Context from getActivity()
}
public class SubClass extends SuperClass {
public SubClass(Context ctx) {
super(ctx);
line = "hello world";
//file doesn't exist yet even thought we have created File object in
//FileUsageTools constructor
if (!filer.file.exists()) {
filer.saveFile(this);
}
}
}
public class SuperClass {
String line;
public SuperClass(Context ctx) {
FileUsageTool filer = new FileUsageTool(ctx);
}
}
public class FileUsageTool {
Context context;
File file;
FileUsageTool(Context ctx) {
context = ctx;
file = new File(ctx.getFilesDir(), "asd.txt");
}
saveFile(SuperClass spr) {
PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(file)));
writer.println(spr.line);
writer.close();
}
}
但是当我想测试子类
和mock上下文
和FileUsageTool
类时
@RunWith(MockitoJUnitRunner.class)
public class SubClassTest {
@Mock
private Context mockContext;
@Mock
private FileUsageTool mockFileUsageTool;
@InjectMocks
private SubClass subClass = new SubClass(mockContext);
public testCase() {
assertEquals(subClass.line == "hello world");
}
当我运行测试时,即使关闭了
mockFileUsageTool
,我仍然会在if(!filer.file.exists())
处获取NullPointerException
。问题可能是在模拟或其他方面。我认为这是因为您在初始化中使用了上下文
试试这个
@RunWith(MockitoJUnitRunner.class) public class SubClassTest {
@Mock private Context mockContext; @Mock private FileUsageTool mockFileUsageTool;
@InjectMock私有子类子类
@override
protected void setUp() {
subClass = new SubClass(mockContext)
}
public testCase() {
assertEquals(subClass.line == "hello world");
}