2017-10-18 145 views
-1

当越来越嘲笑我对这种结构的,在这里我必须向下传递Activity的语境成FileUsageTool -class,在那里我写和阅读有关的​​和SuperClass状态数据的问题测试​​。Android的情况下不测试

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); 
    } 
} 

而且这里FileUsageTool I类必须使用上下文来创建一个文件,并写入。将在SuperClass和​​中调用saveToFile

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(); 
    } 
    } 

但是,当我想测试​​和模拟ContextFileUsageTool

@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"); 
    } 

我一直在if (!filer.file.exists())越来越NullPointerException当我运行测试,即使我把mockFileUsageTool关闭。问题可能在嘲笑或其他事情。

回答

1

我相信这是因为你在初始化中使用上下文。

试试这个

@RunWith(MockitoJUnitRunner.class)    public class SubClassTest { 
    @Mock private Context mockContext;     @Mock private FileUsageTool mockFileUsageTool; 

@InjectMocks私有子类的子类;

@override 
    protected void setUp() { 
    subClass = new SubClass(mockContext) 
} 

    public testCase() { 
    assertEquals(subClass.line == "hello world"); 

}

相关问题