Статический метод с использованием моцито силы - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть класс Engine.class

со статической функцией

public static  HashMap<String, String> loadLanguageCodeFile(HashMap<String,String> hash_map) {
    SystemSettings settings;
    FileReader fr = null;
    BufferedReader br = null;
    try {
      settings = SystemSettings.GetInstance();
      String path = settings.getLangCodePath();
      fr = new FileReader(path + FILENAME);
      br = new BufferedReader(fr);
      String Line;
      while ((Line = br.readLine())!= null) {
        String[] lang_codes =  Line.split("\\s+");
        hash_map.put(lang_codes[0], lang_codes[1]);
      }
    } catch (IOException e) {
      log.error("MicrosoftEngine: Unable to load file.", e);
    } catch (WorldlingoException e){
      log.error("MicrosoftEngine:", e);
    }
    finally {
      try {
        if (fr != null) {
          fr.close();
        }
        if (br != null) {
          br.close();
        }
      } catch ( IOException e) {
        log.error("MicrosoftEngine : An error occured while closing a resource.", e);
      }
    }
   return hash_map;
  }

Я пытаюсь написать контрольный пример для этого метода.Systemsetting - это другой класс, и

settings = SystemSettings.GetInstance();
      String path = settings.getLangCodePath();

`дает экземпляр другого класса и содержит путь к файлу, такой как \ var \ log file в path.

Я пытаюсь написать тестовый пример с использованием mockito,Поскольку это статический класс, я использовал powermockito.

@RunWith(PowerMockRunner.class)
@PrepareForTest({HttpClientBuilder.class,Engine.class, SystemSettings.class})

 public class EngineTest extends TestCase {

        public void testLoadLanguageCodeFile() throws Exception {
            PowerMockito.mockStatic(Engine.class);
            PowerMockito.mockStatic(SystemSettings.class);
            MicrosoftEngine MSmock = Mockito.mock(Engine.class);
            SystemSettings SystemSettingsMock = Mockito.mock(SystemSettings.class);
            Mockito.when(SystemSettingsMock.GetInstance()).thenReturn(SystemSettingsMock);
            HashMap<String, String> hash_map = new HashMap<String, String>();
            MSmock.loadLanguageCodeFile(hash_map);
    }

Я не могу вызвать вышеупомянутый метод loadLanguageCodeFile.Любое предложение, как вызвать статический метод, будет оценено

1 Ответ

0 голосов
/ 03 декабря 2018

Вы не должны издеваться над испытуемым.Вы смоделируете зависимости тестируемого субъекта, необходимые для завершения теста.

Код также тесно связан с проблемами реализации, такими как программа чтения файлов и буфер чтения.

Однако, как указано в комментариях, вы хотите проверить фактическое чтение файла по пути, указанному в проверяемых настройках.

В этом случае вам нужно только смоделировать SystemSettings и следуетвызовите фактического тестируемого члена

RunWith(PowerMockRunner.class)
@PrepareForTest({SystemSettings.class})
public class EngineTest extends TestCase {
    public void testLoadLanguageCodeFile() throws Exception {
        //Arrange
        String path = "Path to test file to be read";
        PowerMockito.mockStatic(SystemSettings.class);
        //instance mock
        SystemSettings settings = Mockito.mock(SystemSettings.class);
        Mockito.when(settings.getLangCodePath()).thenReturn(path);
        //mock static call
        Mockito.when(SystemSettings.GetInstance()).thenReturn(settings);
        HashMap<String, String> hash_map = new HashMap<String, String>();

        //Act
        HashMap<String, String> actual = Engine.loadLanguageCodeFile(hash_map);

        //Assert
        //perform assertion
    }
}

Ссылка Использование PowerMock с Mockito: Mocking Static Metho

...