如何在 JUnit 测试中从抽象创建对象 class
How to create objects in JUnit tests from abstract class
我有一个 abstract class Printers
,我只是想测试它的 equals
方法,但是当我在 PrintersTest
中创建两个 Printers
时,我无法实例化它们。
这是PrintersTest
:
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class PrintersTest {
@Test
void testEqualsObject() {
Printers a = new Printers("BW_LASER HP", "Laserjet 1230", "25", "180 euros");
Printers b = new Printers("BW_LASER HP", "Laserjet 1230", "25", "180 euros");
assertEquals(a,b);
}
}
这是 Printers
class:
import java.util.Objects;
public abstract class Printers {
protected String brand;
protected String model;
protected String pages;
protected String price;
public Printers(String brand, String model, String pages, String price) {
super();
this.brand = brand;
this.model = model;
this.pages = pages;
this.price = price;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Printers)) {
return false;
}
Printers other = (Printers) obj;
return Objects.equals(brand, other.brand) && Objects.equals(model, other.model)
&& Objects.equals(pages, other.pages) && Objects.equals(price, other.price);
}
}
非常感谢您的帮助。
你需要有另一个 class 从打印机扩展(可能你已经拥有它)就像一种打印机或其他什么,然后在你的测试 class 中,你创建一个新的打印机基于class 像这样:
@Test
void testEqualsObject() {
Printers a = new Bw("BW_LASER HP", "Laserjet 1230", "25", "180 euros");
Printers b = new Bw("BW_LASER HP", "Laserjet 1230", "25", "180 euros");
assertEquals(a,b);
}
这将解决您的问题,因为您不需要实例化打印机。
我有一个 abstract class Printers
,我只是想测试它的 equals
方法,但是当我在 PrintersTest
中创建两个 Printers
时,我无法实例化它们。
这是PrintersTest
:
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
class PrintersTest {
@Test
void testEqualsObject() {
Printers a = new Printers("BW_LASER HP", "Laserjet 1230", "25", "180 euros");
Printers b = new Printers("BW_LASER HP", "Laserjet 1230", "25", "180 euros");
assertEquals(a,b);
}
}
这是 Printers
class:
import java.util.Objects;
public abstract class Printers {
protected String brand;
protected String model;
protected String pages;
protected String price;
public Printers(String brand, String model, String pages, String price) {
super();
this.brand = brand;
this.model = model;
this.pages = pages;
this.price = price;
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof Printers)) {
return false;
}
Printers other = (Printers) obj;
return Objects.equals(brand, other.brand) && Objects.equals(model, other.model)
&& Objects.equals(pages, other.pages) && Objects.equals(price, other.price);
}
}
非常感谢您的帮助。
你需要有另一个 class 从打印机扩展(可能你已经拥有它)就像一种打印机或其他什么,然后在你的测试 class 中,你创建一个新的打印机基于class 像这样:
@Test
void testEqualsObject() {
Printers a = new Bw("BW_LASER HP", "Laserjet 1230", "25", "180 euros");
Printers b = new Bw("BW_LASER HP", "Laserjet 1230", "25", "180 euros");
assertEquals(a,b);
}
这将解决您的问题,因为您不需要实例化打印机。