Mockito Moqué de Classe renvoie Null

Je suis à l'aide de Mockito, à se moquer de classe dans ma classe de test JUnit comme suit:

@Before
public void initialize(){
    DescribeHiveTable mockObj = Mockito.mock(DescribeHiveTable.class);
    String tableName = "clslog_assessments";
    String parentDirectoryPath ="src/test/resources/TEST18/RunFiles";
    String[] mockFeaturesArray1 = {"user_id","event_id"};
    ArrayList<String> mockFeaturesList1 = new ArrayList<String> (Arrays.asList(mockFeaturesArray1));
    when(mockObj.describeTable(tableName, parentDirectoryPath)).thenReturn(mockFeaturesList1);

Ensuite, j'ai ma méthode de Test, qui par la suite des appels à la describeTable méthode de l'intérieur.
J'ai vérifié que les arguments: tableName et parentDirectoryPath quand describeTable est appelé sont les mêmes que ceux que j'ai définies dans le initalize méthode.

Cependant, je reçois toujours une valeur de retour null. Je ne comprends pas ce comportement. Peut-être que je ne suis pas en utilisant Mockito correctement?

MODIFIER

Ma méthode d'Essai est quelque chose comme:

@Test
public void testComplexFeaturesExistingRun() {
String[] args = {masterConfigPath, runFilesPath, rootDir};
DriverClass driver = new DriverClass();
driver.main(args);
}

Sorte de pilote.principal appelle la describeTable méthode, dont le comportement, je suis en train de se moquer.

EDIT 2

Mon décrire la ruche classe de table est :

public class DescribeHiveTable {

public ArrayList<String> describeTable(String tableName, String parentDirectoryPath){
    String hiveQuery = "'describe " + tableName + "';";
    String bashScriptFile = parentDirectoryPath + "/describeTable.sh";

    .
    .
    .
        final Process process = builder.start();
        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;
        while((line=br.readLine())!=null) {
            String[] output = line.split("\t");
            columnList.add(output[0]);
       }
       return columnList;

C'est comment je vais appeler décrire table:

DescribeHiveTable describeTable;
describeTable = new DescribeHiveTable();
ArrayList<String> columnList = describeTable.describeTable(tableName, runFile.getParent());
  • Je ne vois pas où votre mockObj, déclarée comme une variable locale de initialize(), laissant le champ d'application de cette méthode. Le problème est que vous n'êtes pas d'édition mockObj (dans un champ d'instance de la classe) et donc pas à l'aide de la maquette de l'objet que vous avez si soigneusement construit?
  • pouvez-vous nous montrer le code que vous utilisez dans la méthode d'essai ?
  • ajouté mon test de code de la méthode
  • Je pense que vous avez peut-être droit. Que proposez-vous que je devrais faire?
  • Je suppose que le DriverClass.main() méthode a un DescribeHiveTable objet à l'intérieur de ce que vous essayez de se moquer, est-ce correct? Si oui, vous avez besoin d'injecter de votre maquette dans cette classe.
  • oui, vous avez raison. Comment puis-je injecter un simulacre?
  • Est le DescribeHiveTable injecté avec un cadre comme le Printemps de l'utilisation de @Autocâblés ou @substance entrant dans la composition? Pouvez-vous nous montrer comment les DescribeHiveTable est utilisé? Si c'est un Printemps injecter de la classe, vous pouvez utiliser MockitoJUnitRunner et des annotations sur la poignée de la config. Si c'est une variable de classe, vous pouvez utiliser ReflectionTestUtils à injecter de la maquette.
  • ajouté mon DescribeHiveTable classe. C'est juste une simple classe Java qui écrit et exécute un script shell, mais je suis en essais sur windows, d'où les moqueries
  • je pense que vous avez mal compris, je suis curieux de voir comment la classe est utilisée dans le code que vous souhaitez tester. Je voudrais voir la déclaration de la DescribeHiveTable variable dans votre DriverClass.main(), est-il une variable initialisée localement avec new ou est-il une variable de classe injecter par ressort avec quelque chose comme @Component ou @Resource
  • a ajouté que la question de son initialisé avec de nouvelles...
  • laissez-nous continuer cette discussion dans le chat
  • veuillez lire ce Mockito page wiki code.google.com/p/mockito/wiki/MockingObjectCreation - c'est l'information dont vous avez besoin.

InformationsquelleAutor Chaos | 2013-09-21