#java #junit #junit4
#java #junit #junit4
Вопрос:
Я написал этот код, но я все еще новичок в JUnit и понятия не имею о тестировании метода equal и equal2. Ниже приведен код, который я написал. Моя цель в этом коде — проверить, равно ли fname lname, используя метод equal, и с помощью equal2 проверить, совпадает ли fname с fname (it self), возможно, в моем коде тоже есть ошибки.
public class EqualMethods {
/**
* @param args
*/
private String fname;
private String lname;
public EqualMethods(String fl)
{
fname = fl;
}
public EqualMethods(String f, String l)
{
fname = f;
lname = l;
}
public String getFname() {
return fname;
}
public String getLname()
{
return lname;
}
public void setLname(String lname)
{
this.lname = lname;
}
public void setFname(String fname) {
this.fname = fname;
}
public int equal(EqualMethods name)
{
if(fname == name.getFname() amp;amp; lname == name.getLname())
{
return 1;
}
else
{
return 0;
}
}
public int equal2(Object o)
{
if(o.getClass() == EqualMethods.class )
{
EqualMethods e = (EqualMethods) o;
if(this.fname.equals(e.fname))
{
return 1;
}
return 0;
}
return 0;
}
public String toString()
{
return (" My first name is: " fname " Last name is: " lname);
}
Цель состоит в том, чтобы создать тестовый пример Junit для equal и equal2, поскольку созданный мной тестовый пример не обеспечивает надлежащего вывода.Вот тестовый пример JUnit, который я написал, но я не могу сделать свой метод статичным, хотя как это обойти?
public class EqualMethodsTest extends TestCase{
@Test
public void testEqual2() {
String name = "goma";
int ret = 1;
int ans ;
ans= EqualMethods.equal2(name);
assertEquals(ret,ans);
}
}
Комментарии:
1. В чем ваш вопрос? Если это запрос на проверку кода, лучшим форумом было бы codereview.stackexchange.com . Вероятно, вам также следует объяснить, что вы требуете / ожидаете, что ваш код действительно будет выполнять.
2. Цель состоит в том, чтобы создать тестовый пример Junit для equal и equal2, поскольку созданный мной тестовый пример не обеспечивает надлежащего вывода.
3. Я имел в виду, что должен делать ваш
EqualMethods
класс. Мне это тоже кажется довольно странным, и если вы не понимаете, что должен делать код, то для него трудно писать тесты. Тесты полезны только в том случае, если они тестируются на соответствие какой-либо спецификации.4. Эта статья, хотя и устаревшая, но содержит хороший пример
testEquals()
: Зараженный тест JUnit: программисты любят писать тесты
Ответ №1:
Вам нужно создать экземпляры EQUALMETHOD, чтобы сравнить их. Вот так:
public class EqualMethodsTest extends TestCase{
@Test
public void testEqual2() {
assertEquals(1, new EqualMethods("goma").equal(new EqualMethods("goma")));
}
}
Редактировать:
Несколько комментариев о коде:
- Если вы работаете с актуальной версией junit, вам не нужно расширять TestCase, и имя тестового метода не обязательно должно начинаться с «test».
- Присвоение имени методу «equal» или «equal2» может быть не лучшей идеей … в Object, корне всех других объектов, уже есть метод с именем «equals» … может сбивать с толку.
- Скорее всего,
fname == name.getFname()
это не то, чего вы хотите достичь. При этом сравниваются ссылки на две строки, а не содержимое. Строки являются объектами и должны сравниваться следующим образомstring1.equals(string2)
.
Комментарии:
1. @Aene- Спасибо за это. Это, конечно, хорошая идея, я начал использовать Junit сегодня, поэтому я ценю ваш совет. Спасибо
Ответ №2:
Вероятно, это лучший способ сделать это:
private EqualsMethods a;
private EqualsMethods b;
@Before
public void before {
a = EqualsMethods("a);
b = EqualsMethods("b);
}
@Test
public void equalTest() {
assertTrue(a.equal(b));
}
@Test
public void equal2Test() {
assertTrue(a.equal2(b));
}
Я все еще думаю, что то, что вы делаете, немного странно, хотя, вероятно, у вас должно быть два класса с одинаковыми атрибутами и методами — каждый с методом equals. Затем вы должны создать тесты для обоих этих классов. Не уверен, чего вы пытаетесь достичь здесь.