繁体   English   中英

JUnit在类之间传递参数

[英]JUnit passing parameters between class

我有以下情况,我不确定从哪里开始,

运行jar文件时,文件名应作为参数参数传递

例如说我想从外部文件测试一组数据,并且我有一个具有第一和第二的超类(测试套件)

有两个测试类应扩展该类并执行测试。

我目前是JUnit的新手,所以我缺少许多概念,需要别人的帮助。

我有CoreManager类,它执行主

  public static void main(String[] args)
    {
      if (Arrays.asList(args).contains("Import"))
        {
       accountInfo = new ArrayList<>();
       int ImportIndex = Arrays.asList(args).indexOf("Import");
       String fileName = args[ImportIndex+1];
       if (fileName.contains("xml"))
       {
           ParseXML parseXML = new ParseXML();
           accountInfo = parseXML.ParseAccounts(fileName);

           Result result = JUnitCore.runClasses(LoginTestSuite.class);

           for (Failure failure : result.getFailures()) {
               System.out.println(failure.toString());
           }

           System.out.println(result.wasSuccessful());
       }
   }
}

和套房

@RunWith(MockitoJUnitRunner.class)

 @Suite.SuiteClasses({
    Login.class,
    SignUp.class

})

public class LoginTestSuite {
public static WebDriver driver;
public static ArrayList<AccountInfo> Account;
public static int SecondsToWait;

public LoginTestSuite(WebDriver driver,ArrayList<AccountInfo> Account,int 
secondsToWait)
{
this.Account = Account;
this.SecondsToWait = secondsToWait;
this.driver = driver;
}

}

和测试班

公共类登录{

private static WebDriver driver;
private static ArrayList<AccountInfo> Account;
private static int SecondsToWait;
private static final Logger logger = Logger.getLogger(Login.class.getName());



@BeforeClass
public void init(){
    this.driver = LoginTestSuite.driver;
    this.Account = LoginTestSuite.Account;
    this.SecondsToWait = LoginTestSuite.SecondsToWait;
}

@Before
public void Setup(){

    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(SecondsToWait, 
     TimeUnit.SECONDS);
    driver.manage().timeouts().pageLoadTimeout(SecondsToWait, 
    TimeUnit.SECONDS);
}

@After
public void TearDown(){
    driver.quit();
}



@Test
public void TestUserLogin() throws Exception
{
    // Logic

}

您的代码看起来很混乱,并且包含一些质量较差的构造。 最重要的是,我看不出测试代码和生产代码之间的区别。 哪一个

这可能是生产代码:

public class App {

    public static void main(String[] args) {    
           AccountReader accountReader = new AccountReader();  
           List<AccountInfo> accounts = accountReader.read(args); 
           // maybe do something with those accounts?                         
    }
}

public class AccountReader {

    private ParseXML parseXML;

    public AccountReader() {
         this.parseXML = new ParseXML();
    }

    // extra constructor to allow dependency injection from test
    protected AccountReader(ParseXML parseXML) {
         this.parseXML = parseXML;
    }

    public List<AccountInfo> read(String[] args) {          
           return parseXML.ParseAccounts(getFileName(args));          
    }

    private String getFileName(String[] args) {
        List<String> arguments = Arrays.asList(args);          
        int importIndex = arguments.indexOf("Import");    
        if (importIndex < 0) {
            throw new RuntimeException("Missing Import argument");
        }        
        int fileNameIndex = importIndex + 1;
        if (fileNameIndex >= arguments.size()) {
            throw new RuntimeException("Missing fileName argument");
        }
        String fileName = args[fileNameIndex];
        if (!fileName.endsWith(".xml")) {
            throw new RuntimeException("Can only import XML files");
        } 
        return fileName;  
    }

}

这可能是一个测试:

public AccountReaderTest {

    private AccountReader instance;
    @Mock // creates a mock instance which we can give desired behavior
    private ParseXML parseXML;
    @Mock
    List<AccountInfo> accounts;

    @Before
    public void setUp() {
        instance = new AccountReader(parseXML);
    }

    @Test
    public void testHappy() {        
        // SETUP
        String fileName = "test.xml";
        // specify desired behavior of mock ParseXML instance
        when(parseXML.ParseAccounts(fileName).thenReturn(accounts);

        // CALL 
        List<AccountInfo> result = instance.read(new String[] { "Import", fileName });

        // VERIFY
        assertEquals(accounts, result);
    }

    @Test(expected = RuntimeException.class)
    public void testMissingImport() {        
         instance.read(new String[] { "notImport" });
    }

    @Test(expected = RuntimeException.class)
    public void testMissingFileName() {        
         instance.read(new String[] { "Import" });
    }

    @Test(expected = RuntimeException.class)
    public void testNotXml() {        
         instance.read(new String[] { "Import", "test.properties"});
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM