2016-04-07 12 views
0

in unter Testskript Ich möchte den Wert suiteResult von Klasse SuiteOneBase zu Klasse SuiteOneCaseOne übergeben. Wie kann ich das tun. Angenommen, ich bekomme suiteResult =true dann sollte ich in Klasse SuiteOneCaseOne wahr werden. Aber jetzt everytime ich bin immer falsch nurWie bekomme ich die Variable einer Klasse in einer anderen erweiterten Klasse

Erste Klasse

public class SuiteOneBase extends SuiteBase{ 
    boolean suiteResult; 
@BeforeSuite 
    public void checkSuiteToRun() throws IOException{ 
     init(); 
     //To set TestSuiteList.xls file's path In FilePath Variable. 
     FilePath = TestSuiteListExcel; 
     SheetName = "SuitesList"; 
     SuiteName = "SuiteOne"; 
     ToRunColumnName = "SuiteToRun"; 
     suiteResult= SuiteUtility.checkToRunUtility(FilePath, SheetName,ToRunColumnName,SuiteName); 

      if(!suiteResult){ 

      SuiteUtility.WriteResultUtility(FilePath, SheetName, "Skipped/Executed", SuiteName, "TestSuite Skipped"); 
       throw new SkipException(SuiteName+"'s SuiteToRun Flag Is 'N' Or Blank. So Skipping Execution Of "+SuiteName); 
     } 
     SuiteUtility.WriteResultUtility(FilePath, SheetName, "Skipped/Executed", SuiteName, "TestSuite Executed"); 

    } 
} 

zweiter Klasse

public class SuiteOneCaseOne extends SuiteOneBase{ 

     @BeforeTest 
     public void checkCaseToRun() throws IOException{ 


      System.out.println("suiteResult "+suiteResult); 
      if(!suiteResult){ 
      if(!SuiteUtility.checkToRunUtility(FilePath, SheetName,ToRunColumnNameTestCase,TestCaseName)){ 

       SuiteUtility.WriteResultUtility(FilePath, SheetName, "Pass/Fail/Skip", TestCaseName, "TESTCASE SKIP"); 

       throw new SkipException(TestCaseName+"'s CaseToRun Flag Is 'N' Or Blank. So Skipping Execution Of "+TestCaseName); 
      } 
      } 

      TestDataToRun = SuiteUtility.checkToRunUtilityOfData(FilePath, TestCaseName, ToRunColumnNameTestData); 

     } 

SuiteBase

package com.stta.TestSuiteBase; 

import java.io.IOException; 
import com.stta.utility.Read_XLS; 

public class SuiteBase {  
    public static Read_XLS TestSuiteListExcel=null; 
    public static Read_XLS TestCaseListExcelOne=null; 
    public static Read_XLS TestCaseListExcelTwo=null; 

    public void init() throws IOException{ 

    TestSuiteListExcel = new Read_XLS(System.getProperty("user.dir")+"\\src\\com\\stta\\ExcelFiles\\TestSuiteList.xls"); 

    TestCaseListExcelOne = new Read_XLS(System.getProperty("user.dir")+"\\src\\com\\stta\\ExcelFiles\\SuiteOne.xls"); 

     TestCaseListExcelTwo = new Read_XLS(System.getProperty("user.dir")+"\\src\\com\\stta\\ExcelFiles\\SuiteTwo.xls");                   

} 
} 
+0

können Sie zu schreiben SuiteBase? –

+0

Wenn beide Klassen im gleichen Paket sind, dann ist es bereits verfügbar..Sie verwenden super Schlüsselwort und sehen, was alle Variablen und Methoden zugänglich sind –

Antwort

0

Sie sollten suiteResult öffentlichen oder geschützten Variable der Klasse SuiteOneBase erstellen

public boolean suiteResult; 
    or 
    protected boolean suiteResult; 

Hoffe, das wird funktionieren !!

+0

Nein, das ist falsch. SuiteOneCaseOne kann Suite'NeBase 'suiteResult' bereits sehen, da sie sich im selben Paket befinden, so dass kein Modifier benötigt wird. –

0

SuiteOneCaseOne erstreckt SuiteOneBase und ist im selben Paket, so kann es bereits finden Sie in der Paketebene suiteResult. Keine Notwendigkeit für ein zusätzliches Bestehen.

Die @BeforeSuite in SuiteOneBase läuft vor die @BeforeTest in SuiteOneCaseOne, so dass die Tatsache, dass dieser suiteResult == false beweist sieht, dass der ehemalige - muss explizit gesetzt suiteResult = false haben - die haben laufen müssen.

Sie suchen nicht nach einem Standardwert oder nach dem Wert eines anderen Felds. checkSuiteToRun() muss laufen, und es gibt keine Ausnahmen oder zurückgibt, so:

suiteResult= SuiteUtility.checkToRunUtility(FilePath, SheetName,ToRunColumnName,SuiteName); 

... muss false zurückgegeben haben.

(Und noch nicht erwähnt, dass die Tests aufgrund der SkipException nicht ausgeführt werden. Ich weiß nicht, wie das vermieden werden kann. Es sei denn vielleicht Ihre @BeforeSuite wurde aus dem falschen Paket importiert, dh es tut nicht ‚t tatsächlich erhalten run)

1

Sie ITestContext zu diesem Zweck verwenden können.

public class SuiteOneBase extends SuiteBase { 

    @BeforeSuite 
    public void checkSuiteToRun(ITestContext context) throws IOException { 
     // [...] 
     boolean suiteResult = SuiteUtility.checkToRunUtility(FilePath, SheetName,ToRunColumnName,SuiteName);  
     // [...] 
     context.setAttribute("suiteResult", suiteResult);  
    } 
} 

Und

public class SuiteOneCaseOne extends SuiteOneBase { 

    @BeforeTest 
    public void checkCaseToRun(ITestContext context) throws IOException {  
     boolean suiteResult = context.getAttribute("suiteResult"); 
     System.out.println("suiteResult "+suiteResult); 
     // [...]  
    } 
} 
+0

Hallo, ich habe obige Lösung, aber ich bekomme Fehler "Typ nicht übereinstimmend: kann nicht in boolean" in Zeile boolean suiteResult = context.getAttribute ("suiteResult") ;. Und wenn ich Kaste zu Boolean es geben Ergebnis als Null – DoubtClear

+0

"Typ nicht übereinstimmend: Objekt kann nicht in Boolean konvertiert werden" liegt an der booleschen Konvertierung von null. Die Frage ist, warum das Attribut nicht im Kontext (null) ist. – juherr

Verwandte Themen