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();
   }
   }
在class
FileUsageTool
中,我必须使用上下文来创建一个文件并对其进行写入<将在
超类
子类
中调用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"); 
}