Всем привет. У меня дилема. вот ситуация....
Есть цикл в котром идёт проверка Элементов AssertEquals.
assertEquals(".... ", znachenie 1, znachenie 2);
и таких проверок очень много в цикле....
При каждом новом прохождении цикла значения меняются.. Они затягиваются с файла.
Вопрос - как сделать так, чтобы тесты не останавливались, если assertEquals=false.
И самое главное - чтобы по прежнему оно выводило результат как и раньше Actual and expected...
Всем заранее благодарен!!!
polusok
(Mykhailo Poliarush)
12.Апрель.2013 09:11:58
#2
перечитал и все перепробовал. Или останавливает тесты или не выкидывает exception такой как раньше assertEQUALS
Может что то ещё есть в запасе??)
polusok
(Mykhailo Poliarush)
12.Апрель.2013 12:44:20
#5
ну если пробовали, что-то показывайте код, который у вас не работает
глупо ожидать, что придет кто-то и сразу напишет, код который подойдет именно Вам
T0pA
(Антон)
12.Апрель.2013 12:49:01
#6
Можно, к примеру, в цикле в случае несоответствия какому-то условию записывать данные, которые дают неверный результат, плюс сообщение об ошибке в массив и дополнительно запись об этом в лог. После прохождения цикла сделать ассерт на проверку пустой ли этот массив и в тексте ошибки вывести текст, состоящий из элементов массива с накопленной ошибкой.
Вот вроде оно ... А можно какой то пример кода глянуть... если вас не затруднит.
smlionceau
(smlionceau)
12.Апрель.2013 14:09:22
#8
Как вариант, можно каждый ассерт обернуть try/catch с блоком вывода текста ошибки в catch. Ошибку напишет, тест не сотановит
XGor
(XGor)
12.Апрель.2013 18:11:31
#9
private StringBuffer verificationErrors = new StringBuffer();
тесты... в слечае ошибки записываем в verificationErrors
@After public void tearDown() throws Exception { driver.quit(); String verificationErrorString = verificationErrors.toString(); if (!"".equals(verificationErrorString)) { fail(verificationErrorString); }
polusok
(Mykhailo Poliarush)
12.Апрель.2013 18:18:00
#10
мягкие ассерты были уже давно выполненны в Senelium RC, вот пример
package com.example.tests;
import com.thoughtworks.selenium.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import java.util.regex.Pattern;
public class Untitled {
private Selenium selenium;
@Before
public void setUp() throws Exception {
selenium = new DefaultSelenium("localhost", 4444, "*chrome", "http://change-this-to-the-site-you-are-testing/");
selenium.start();
}
@Test
public void testUntitled() throws Exception {
verifyEquals("", selenium.getAlert());
}
@After
public void tearDown() throws Exception {
selenium.stop();
}
}
protected StringBuffer verificationErrors = new StringBuffer ();
/** Like assertTrue, but fails at the end of the test (during tearDown) */
public void verifyTrue ( boolean b ) {
try {
assertTrue ( b );
} catch ( Error e ) {
verificationErrors . append ( throwableToString ( e ));
}
}
/** checks for verification errors and stops the browser */
public void tearDown () throws Exception {
try {
checkForVerificationErrors ();
} finally {
if ( selenium != null ) {
selenium . stop ();
selenium = null ;
}
}
}
https://code.google.com/p/selenium/source/browse/java/client/src/com/thoughtworks/selenium/SeleneseTestBase.java
А разве в вашей среде разработки *unit нет возможности написать кастомный ассёрт повышенной мягкости (комфортности)?
Запросы для двух популярных на этом форуме движков будут выглядеть так:
"junit custom assert"
"testng custom assert"
вот один из ответов по junit:
http://stackoverflow.com/questions/5407955/how-do-you-unit-test-a-custom-assert
ArtOfLife
(Sergey Korol)
13.Апрель.2013 09:09:52
#12
Уже в какой-то теме отвечал на этот вопрос: TestNG содержит класс SoftAssert, который будет накапливать сфейлившиеся ассерты, а затем выплюнет эксепшен только при вызове определенного метода.
В BasePage храним объект.
private SoftAssert softAssert;
public SoftAssert getSoftAssert() {
return softAssert;
}
В PageObject проводим необходимую верификацию, например:
public void verifyText(String pageElement, String expectedValue, String requirement) {
getSoftAssert().assertTrue(getText(getHTMLElement(pageElement)).equals(expectedValue), requirement);
}
Из теста дергаем следующим образом:
loginPage.verifyText(PageElement.LoginPage.Label.USERNAME, "Username", "Req 1.1");
После завершения всех проверок из BaseTest класса нужно дернуть метод, который выплюнет эксепшен со всеми фейлами:
public void getFailedRequirements() {
getSoftAssert().assertAll();
}
В логе будет написано нечто вроде:
The following asserts failed: Req 1.1, Req 1.2, Req 1.N.
Если хотите более подробной информации, никто вам не мешает вместо requirement указать expected и actual values. It's up to you.
Всем большое спасибо... Попробую отпишусь
Попробывал ваш вариант - всё работает, но не совсем так как хотелось... Результат в консоль выводит... А хотелось как раньше в Failure Trace
Вопрос Решил посредством обверки в try/catch и errorCollector
Всем Большое Спасибо.
polusok
(Mykhailo Poliarush)
18.Апрель.2013 06:44:24
#16
ну так а что мешает дописать функциональность, которую надо вам? не знание java?
Просто не до конца понял) после try / catch всё встало на места. В Любом случае спасибо
Сделал как вы говорили... Всё круто... Спасибо.
Переписал пару методов и собрал все Ошибки колектором.
Всем Привет ещё раз. Теперь столкнулся с той же ситуацией.... но перешел на TestNG. Чем можно заменить ErrorCollector на TestNG кто-то подскажет??
ArtOfLife
(Sergey Korol)
18.Июнь.2013 17:22:57
#20
Чем вам не подошел вариант 3мя постами выше? Люди тратят свое время, а вы даже не читаете...