2013-12-16 2 views
1

hi Я хочу прекратить дальнейшее выполнение теста, когда данных нет в датаподатчике. Мои dataproviders пополняются динамически на лету. Поэтому я хочу, чтобы мои тесты перестали выполняться, если нет данных в dataprovider. Ниже приведен фрагмент кода.Остановить тестовое выполнение testNG, если поставщик данных пуст

package myTest; 

import org.testng.Reporter; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Factory; 
import org.testng.annotations.Test; 

public class NewTest 
{ 
    String str; 
    @DataProvider 
    public Object[][] test123() 
    { 
     System.out.println(" Filling dataprovider."); 
     return new Object[][]{}; 
    } 

    @Factory(dataProvider="test123") 
    public NewTest(String str) 
    { 
     System.out.println("Running through factory."); 
     this.str=str; 
    } 

    @Test 
    public void test1234() 
    { 
     Reporter.log("--->>> running test "+str,true); 
    } 
} 

Я хочу, чтобы test1234 не запускался, если dataprovider пуст.

+0

вы запустить тест ?, Я думаю TestNG заботится об этом автоматически и не будет запускать ваш тест, если ваш тест не принимает никаких параметров, и вы передаете ему пустой dataProvider. – avinesh

+0

Да, я побежал над тестом, и он сгенерировал все отчеты и все. вот что я не хочу получать. поэтому проблема заключается в том, что у меня есть огромное количество тестов, и становится трудно проходить через каждый отчет и посмотреть, прошел ли этот тест или нет. поэтому я хочу, чтобы, если нет тестовых данных, тогда отчет не должен генерироваться. –

ответ

0

Вы можете попробовать добавить другой метод в свой класс и добавить примечание Factory . Из этого метода вы можете вызвать конструктор этого тестового класса для выполнения тестов. Перед вызовом конструктора проверьте правильность аргумента, и вы действительно хотите запустить тесты для этого аргумента. Теперь вам нужно вызвать этот класс Factory.

<code> 

Class NewTestFactory(){ 

@Factory(dataProvider="test123")  
public Object[] executeTests(String str){ 
Object obj[] = new Object[1]; 

     if (str != null){ 
     obj[0] = new NewTest(str) 
     } 
    } 
    return obj 
} 

</code> 
+0

привет neeraj .. в TestNG..датчик данных доступен только в том случае, если тестовый экземпляр запускается в случае заводского обеспечения. поэтому, если мы попытаемся использовать вышеописанный метод, мы не будем знать, имеет ли значение датапарад для этого тестового экземпляра значение или нет. –

+0

Приносим извинения, что вы можете разместить поставщика данных ur в том же классе, где вы собираетесь установить метод Factory. Я полагаю, что провайдер данных привыкает только к Фабрике, который далее передает параметр экземпляру тестового класса. В этом случае он должен работать нормально, если вы выберете фабрику и поставщика данных в отдельном классе. –

0

Просто верните пустой 2D-массив. Что-то вроде:

@DataProvider 
    public Object[][] test123() 
    { 
     Object[][] data= null; 
     System.out.println(" Filling dataprovider."); 
     if(someSplCondition) //Returning empty 2D so that test doesn't execute 
      data = Object[0][0] 
     else 
      data = fillTestData() 

     return data; 
    } 

Кроме того, если вы используете Maven не забудьте положить -DfailIfNoTests = False в МВН команды

+0

, если бы вы заметили, что то, что я делаю. Возвращаю пустой массив 2D-объектов. Но он все еще идет вперед и выполняет тестовый метод и генерирует отчеты –

Смежные вопросы