Использовав @Mock я @Test оно не функционирует, хотя санкционируя через простой debug оно функционирует completamanete, я не понимаю, как использовать Mocks, и то, что я тестирую, очень простое:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
public class SepaRoutingFromXMLTest {
@Mock
SepaRoutingUtils sepa;
@Test
public void existValidOneFullXMLFileInFolder() throws Exception {
assertThat("ARCHIVE_20141224.xml", containsString(".xml"));
assertThat(sepa.readSepaXMLFile(), containsString("ARCHIVE_"));
}
}
Первый assertThat
функционируй без проблемы он очень основной, однако второй, который видимо равен тривиального, возвращает меня:
Expected: a string containing "SEPAROUTING_V3_FULL_" but: was null
Поскольку возможно видеть, я делаю mock:
@Component
public class SepaRoutingUtils {
public String readSepaXMLFile() {
return "ARCHIVE_20141224.xml";
}
}
Что для меня является главным образом тем же самым, но я догадываюсь, что я не понимаю функционирование @Mock и также не могу делать один @Autowired из этого класса, потому что я думаю, что не нужно делать в @Test.
Я вижу, что, сделав следующее изменение, оно функционирует правильно:
@RunWith(SpringRunner.class)
public class SepaRoutingFromXMLTest {
@Test
public void existValidOneFullXMLFileInFolder() throws Exception {
SepaRoutingUtils sepa = new SepaRoutingUtils();
assertThat(sepa.readSepaXMLFile(), containsString(".xml"));
assertThat(sepa.readSepaXMLFile(), containsString("ARCHIVE_"));
}
}
Однако делать это не подает меня, потому что в classe SepaRoutingUtils
я должен получать стоимость с @Value:
@Value("${from.folder}")
private String FROM_FOLDER;
Я знаю, что могут не попасть в меня, и несколько концепций.
Обновление класса SepaRoutingUtils
@Component
public class SepaRoutingUtils {
@Value("${from.folder}")
private String FROM_FOLDER;
private File readSepaFolder() {
File folder = new File(FROM_FOLDER);
if(!folder.isDirectory()) {
throw new FolderAccessDeniedException();
}
return folder;
}
public String readSepaXMLFile(SepaRoutingFileType fileType) {
try {
return Utils.prepareXMLFile(readSepaFolder(), fileType).getName();
}
catch (ParseException e) {
e.printStackTrace();
throw new NotValidFileException();
}
}
}
Дополняя правильный ответ в общих условиях @SJuan76.
Для твоего случая в особенности ты хочешь реализовать лишенный mock члена в, которого тебя не может делать ему @Mock/@Spy
, из-за того, что - конечный класс (String)
возможное решение, он мог бы состоять в том, чтобы использовать reflection , чтобы добавлять проверяемую стоимость к этому String:
import org.springframework.util.ReflectionUtils;
@RunWith(MockitoJUnitRunner.class)
public class SepaRoutingUtilsTest {
@InjectMocks
private SepaRoutingUtils sepa;
@Before
public void setUp() throws NoSuchFieldException {
Field field = SepaRoutingUtils.class.getDeclaredField("FROM_FOLDER");
ReflectionUtils.makeAccessible(field);
ReflectionUtils.setField(field, sepa, "ARCHIVE_20141224.xml");
}
@Test
public void existValidOneFullXMLFileInFolder() throws Exception {
assertThat("ARCHIVE_20141224.xml", containsString(".xml"));
assertThat(sepa.readSepaXMLFile(), containsString("ARCHIVE_"));
}
}
Ты делаешь mocks
, чтобы заменять компоненты, от которых зависит cГіdigo, который ты тестируешь. AsГ - ты можешь тестировать компонент, не завися от, если замененные компоненты функционируют правильно или нет.
Твой компонент делает таким, что asГ - 1 :
public MiComponente {
@Autowired MiComponentePersistencia persistencia;
public int getSuma(String param) {
int[] datos = persistencia.getNumeros(param);
int resultado = 0;
for (int dato : datos) {
resultado += dato;
}
return resultado;
}
}
ВїCГіmo ты тестируешь getSuma()
? Стоимость, которую ты получаешь dependerГЎ от того, что persistencia.getNumeros()
возвращает тебе, asГ - что, если ты это не контролируешь не podrГЎs, делать тест (или по крайней мере, не podrГЎs санкционировать результат).
AsГ - что
@Mock
MiComponentePersistencia persistencia;
@InjectMocks
MiComponente compAProbar;
@Test
public void testSuma() {
when (persistencia.getNumeros("hola")).thenReturn(new int[]{1, 2});
assertEquals("Valor de la suma", 3, compAProbar.getSuma("hola"));
}
И sГ, - podrГ-схвати просто делать ты implementaciГіn "в руку" MiComponentePersistencia
, чтобы делать то же самое. frameworks mock
просто облегчают тебе задание много.
1 Действительно у меня есть mГЎs опыт с Java США и Mockito, что со Спринг, asГ, - что я disculparГЎs, если что-то из Спринг полностью не правильна.
File folder = new File(FROM_FOLDER);
, дает мне NullPointerException. – AndreFontaine 19.03.2018, 17:41File folder = new File(FROM_FOLDER);
, и который быть должен выполнять тест, он дает мне NullPointerException. – AndreFontaine 19.03.2018, 17:56