2017-10-18 36 views
-1

j'ai des problèmes dans les tests SubClass ce type de structure, où je dois livrer contexte de Activity en une FileUsageTool -class, où j'écrire et lire des données sur l'état de SubClass et SuperClass.contexte Android ne se moquaient lors du test

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

Et ici en classe FileUsageTool je dois utiliser le contexte pour créer un fichier et d'écrire. saveToFile sera appelé à la fois, SuperClass et SubClass.

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

Mais quand je veux tester les SubClass et se moquer Context et FileUsageTool cours

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

Je continue de recevoir NullPointerException à if (!filer.file.exists()) quand je lance le test, même si je prends le large mockFileUsageTool. Le problème pourrait être de se moquer ou d'autre chose.

Répondre

1

Je crois que c'est parce que vous utilisez le contexte dans l'initialisation.

essayer cette

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

@InjectMocks SubClass privé subClass;

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

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

}