【发布时间】:2014-07-17 11:03:37
【问题描述】:
我不明白为什么这里的错误“不能从静态上下文引用非静态方法 getLoginPage()”!?这里没有什么静态的!看起来微不足道,但我不确定我错过了什么。
编辑: 我知道通过实例化 TestFramework 我可以摆脱错误,但按照建议,我试图避免在我的单元测试中实例化对象,并在需要时将对象创建传递给我的框架。另一方面,将 TestFramework 中的 getLoginPage() 设为静态,会在我的 TestFramework 类中创建一大堆类似的错误!
类 Tests.java:
public class Tests {
@Test
public void User_Can_Login(){
String username = "Jake";
String password = "Jake";
TestFramework.getLoginPage().Login(username, password);
assertTrue(TestFramework.getLoginPage().CheckIfLoggedIn(username));
}
类 TestFramework.Java:
public class TestFramework {
private LoginPage loginPage;
public LoginPage getLoginPage() {
loginPage = new LoginPage();
PageFactory.initElements(Browser.getDriver(), loginPage);
return loginPage;
}
public class LoginPage {
String Url = "http://localhost:8080";
String welcomeMsg = "Welcome";
public void Login(String username, String password) {
Browser.Goto(Url);
Browser.Input(username,password);
Browser.Submit();
}
public boolean CheckIfLoggedIn(String user){
return Browser.getTextByxpath("/html/body/header/div/p").contains(welcomeMsg + " " + user);
}
}
【问题讨论】:
-
可能是因为你没有TestFramework的实例...
-
getLoginPage()方法不是静态的。所以你不能像TestFramework.getLoginPage()那样打电话。您需要创建对象new TestFramework().getLoginPage(); -
附带说明,您可能希望参考 Java 命名约定,即方法名称以小写开头,没有下划线等
-
@JamesB 对了!过段时间回到Java,忘记命名约定了,谢谢提醒
标签: java unit-testing junit4