为什么我的Java单元测试结果会将预期结果与内存位置进行比较?

为什么我的Java单元测试结果会将预期结果与内存位置进行比较?,java,selenium-webdriver,junit,junit4,Java,Selenium Webdriver,Junit,Junit4,我是一名Java测试新手,我正在尝试在JUnit中执行一个数据驱动测试以供练习。我想检查预期的定位器是否等于我的“UsernameVerification()”方法生成的实际定位器。当前,我的测试所引用的类中有以下代码块: public void UsernameVerification() { ChromeDriver driver = new ChromeDriver(); driver.get(LOGINPAGE); WebEleme

我是一名Java测试新手,我正在尝试在JUnit中执行一个数据驱动测试以供练习。我想检查预期的定位器是否等于我的“UsernameVerification()”方法生成的实际定位器。当前,我的测试所引用的类中有以下代码块:

    public void UsernameVerification() {
        ChromeDriver driver = new ChromeDriver();
        driver.get(LOGINPAGE);
        WebElement username = driver.findElement(By.cssSelector("#username"));
        username.sendKeys("username@user.com");
    }
这是我对应的测试类:

@Test
public void test(){
    DataDriven test = new DataDriven();
    test.UsernameVerification();
    assertEquals("#username", test);
}
运行测试时,出现以下错误:

org.opentest4j.AssertionFailedError:应为:但为:

应为:#用户名

实际:DataDriven@6c372fe6

我怀疑问题在于JVM不知道应该将定位器与UsernameVerification()方法的哪一部分进行比较。。。或者“assertEquals”对“equals”的理解有点过于字面化

是否有一种方法可以让“assertEquals”将我的UsernameVerification()方法中的“username”WebElement与我输入的预期定位器进行比较,从而使测试通过


抱歉,没有合适的术语。我对Java中对象引用的工作原理做了一些研究,我有点了解,但不确定如何解决这个问题。

这里,
test
是对
DataDriven
类实例的引用,
“#username”
是一个字符串。字符串不能等于用户名,这与任何给定的枪都不可能与任何给定的用户名相同。这两种物体的种类大不相同,因此试图以极快的速度比较这两种结果:不,它们当然不一样

错误消息看起来像内存地址,但这只是因为它调用了DataDriven的默认
toString()
方法,该方法以这种方式打印自身。该地址不是比较例程的一部分

检查
DataDriven
是否具有equals方法。如果没有,就编写它;如果不能,就根本不能对数据驱动实例使用
assertEquals
。如果是,那就太好了-您可以将
DataDriven
的一个实例与另一个实例进行比较


或者,查询DataDriven实例以获取一些值,然后对照
“#username”
检查该值。例如:
assertEquals(“#username”,test.getUsername())
。我不知道什么是
DataDriven
或者它是什么样子,所以我假设它有一个
getUsername()
方法。你正在寻找类似的东西(当然,要确保它返回一个
字符串
,或者你还在比较guns和grammas。

这里,
test
是对
数据驱动的
类和
用户名的引用
是一个字符串。字符串不能等于用户名,因为同样的原因,任何给定的枪都不可能与任何给定的外婆相同。这些对象的种类非常不同,因此尝试以极其快速的方式比较这两个结果:不,当然它们不一样

错误消息看起来像内存地址,但这只是因为它调用了DataDriven的默认
toString()
方法,该方法以这种方式打印自身。该地址不是比较例程的一部分

检查
DataDriven
是否有一个equals方法。如果没有,则编写它,如果不能,则根本不能对DataDriven实例使用
assertEquals
。如果有,很好-您可以将
DataDriven
的一个实例与另一个实例进行比较


或者,查询数据驱动实例以获取一些值,然后对照
“#username”
检查该值。例如:
assertEquals(“#username”,test.getUsername())
。我不知道
数据驱动的
是什么或者它看起来像什么,所以我假设它有一个
getUsername()
方法。您正在寻找类似的东西(当然,要确保它返回一个
字符串
,或者您仍然在比较guns和grandmas。

assertEquals
对您的
WebElement
ChromeDriver
一无所知。当您说
assertEquals(“用户名”,test)时
您正在断言一个字符串等于另一个字符串。在这种情况下,字面上是
“#username”
DataDriven
的实例。比较调用
test.toString()
DataDriven
不会覆盖默认的
对象.toString()
。所以您的比较在两方面都是不正确的。@ElliottFrisch我怀疑它甚至调用了
toString()
;我认为它确实直接且仅
toString()
s错误输出。
assertEquals
对您的
WebElement
ChromeDriver
一无所知。当您说
assertEquals(“#username”,test);
时,您断言一个字符串等于另一个字符串。在这种情况下,字面上是
“#username”
DataDriven
的一个实例。比较调用了
test.toString()
,而
DataDriven
没有覆盖默认的
对象。toString()
。因此您的比较在两方面都是不正确的。@ElliottFrisch我怀疑它甚至调用了
toString()
;我认为它确实直接等于
并且仅
toString()
s错误输出。感谢您的响应。DataDriven是我用来查找css选择器的类。我想检查预期的选择器是否与网页上的选择器相同,这就是我使用assertEquals()的原因JUnit附带的方法。因此assertEquals()不是DataDriven类中的方法,只是DataDrivenTest类中的方法。字符串“#username”是页面上元素的名称。感谢您的响应。DataDriven是我用于查找css选择器的类。我要检查预期的选择器是否与t上的选择器相同