Проблемы с Junit4 и PowerMock при использовании метода getinstance Stati c для объекта Singleton - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть класс, как показано ниже, для которого мне нужно написать тестовые случаи Junit. У меня есть некоторая идея, как смоделировать метод stati c, когда я учусь. но я нахожу трудности, как мне издеваться над методами. Я слежу за этим в Mocking stati c методов Ниже код содержит stati c и singleton-методы, и в качестве параметра я передаю другой вызов метода AccessValidate. поскольку я учусь, я нахожу это трудным.

@Component
public class ToBeTested{
  @Autowired
  RestTemplate restTemplate;

  @Autowired
  AccessValidate accessValidate;

  Public SomeObject someOperation() throws Exception{
    HttpHeader headers = new HttpHeaders();
    MultivalueMap<String, String> valueObject = new LinkedMultivalueMap<>();
    valueObject.add("SomeStringKey", SingletonClass.getInstance().decryption(accessValidate.getAccess("applicationName").getId(), accessValidate.getAccess("applicationName").getPassword()));
    .....
    .....
   return restTemplate.postForObjects(args...);
   }
}

другие полезные классы

public class Singleton{
  private static SingletonClass object;
  public static synchronized SingletonClass getinstance(){
  if(object == null){
   object = new SingletonClass();
   }
  }
  public String decryption(String name, String msg){
   //decryption
   return "decryptedString";
  }

  // some more methods
}

другой класс

public class AccessValidate{
  Public SomeObject getAccess(String AppName){
   SomeObject idAndPassword = new SomeObject();
   //....set id and password using some operation
   return idAndPassword;
  }
  ......
}

У меня есть некоторая идея, как издеваться Stati c метод, как я учусь. но я испытываю затруднения, как мне издеваться над методами

valueObject.add("SomeStringKey", SingletonClass.getInstance()
.decryption(GrantAccess.getAccess("applicationName").getId(),
 accessValidate.getAccess("applicationName").getPassword()));

Выше код включает в себя методы stati c и singleton, и в качестве параметра я передаю другой вызов метода AccessValidate. поскольку я учусь, я нашел это трудным.

Ниже мой подход:

@RunWith(PowerMockRunner.class)
@PrepareForTest({Singleton.class})
public class TestToBeTested{

@Test
public void testCaseforSomeOperation_method() throws Exception{
 Singleton singleton = Mockito.mock(Singleton.class);
 LinkedMultivalueMap map = Mockito.mock(LinkedMultivalueMap.class);
 PowerMockito.whenNew(Singleton.class)
  .withNoArguments().thenReturn(singleton);
 PowerMockito.whenNew(LinkedMultivalueMap.class)
  .withNoArguments().thenReturn(map);
 ...

}
}
...