私は JUnit テストを始めたばかりで、それがどのように機能するのかに興味があります。現在、ユニットテストに合格しようとしています。
テスト方法は
@Test
public void ensure_equals_method_is_properly_coded ()
{
assertTrue(employees.get(0).equals(employees.get(2)));
assertFalse(employees.get(0).equals(employees.get(1)));
assertFalse(employees.get(0).equals(employees.get(3)));
}
既に値が入力されている ArrayList があります。私が理解していることから、このテストを自分のタスクに渡すために equals() というメソッドを作成することを想定しています。私の質問は、このメソッドがテスト対象のメソッドをどのように見つけるかです。Persons というクラスに equals() メソッドを作成しましたが、テストを実行したときにそれが呼び出されているかどうかさえわかりません。
2 番目の質問は、equal() メソッドのロジックについて質問することです。これまでのところ、私はこれを持っています。
public boolean equals() {
if (employees.get(0).equals(employees.get(2)))
return true;
return false;
}
最初のテスト項目が true をアサートするため、これは true を返すはずです。これについて私の論理は正しいですか?
わかりやすくするために、ここに私の完全な Test クラスを示します。すべてが既に存在します。
public class Tests
{
List<Person> employees = new ArrayList<Person>();
@Before
public void init ()
{
Person anEmployee = new Employee();
anEmployee.setName("Trevor Page");
anEmployee.setSex("Male");
Calendar cal = Calendar.getInstance();
cal.set(1983, 0, 1);
anEmployee.setBirthday(cal.getTime());
((Employee)anEmployee).setJobTitle("Sr. Software Engineer");
((Employee)anEmployee).setOrganization(new Google("Google"));
employees.add(anEmployee);
anEmployee = new Employee();
anEmployee.setName("Jane Doe");
anEmployee.setSex("Female");
anEmployee.setBirthday(cal.getTime());
((Employee)anEmployee).setJobTitle("Sr. Software Engineer");
((Employee)anEmployee).setOrganization(new Google("Google"));
employees.add(anEmployee);
anEmployee = new Employee();
anEmployee.setName("Trevor Page");
anEmployee.setSex("Male");
anEmployee.setBirthday(cal.getTime());
((Employee)anEmployee).setJobTitle("Sr. Software Engineer");
((Employee)anEmployee).setOrganization(new Google("Google"));
employees.add(anEmployee);
anEmployee = new Employee();
anEmployee.setName("Trevor Page");
anEmployee.setSex("Male");
anEmployee.setBirthday(cal.getTime());
((Employee)anEmployee).setJobTitle("Sr. Software Engineer");
((Employee)anEmployee).setOrganization(new Microsoft("Microsoft"));
employees.add(anEmployee);
}
@Test
public void ensure_toString_method_is_properly_coded()
{
String message = "Name: Trevor Page, Sex: Male" +
"\nJob Title: Sr. Software Engineer, Organization: Google";
assertThat(employees.get(0).toString(), is(message));
}
@Test
public void ensure_equals_method_is_properly_coded ()
{
assertTrue(employees.get(0).equals(employees.get(2)));
assertFalse(employees.get(0).equals(employees.get(1)));
assertFalse(employees.get(0).equals(employees.get(3)));
}
これが、Abstract である完全な Persons クラスです。私はすでに最初のテストケースを動作させています。
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public abstract class Person
{
public abstract String getName();
public abstract String getSex();
public abstract void setName(String name);
public abstract void setSex(String sex);
public abstract void setBirthday(Date birthdate);
public abstract Date getBirthday();
public abstract String getJobTitle();
public abstract String getNameOfOrganization();
List<Person> employees = new ArrayList<Person>();
@Override
public String toString() {
return "Name: " + getName() + ", Sex: " + getSex() + "\n" + "Job Title: " + getJobTitle() + ", Organization: " + getNameOfOrganization() ;
}
}
この抽象クラスを拡張する Employee という別のクラスがあります。
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Employee extends Person
{
List<String> employees = new ArrayList<String>();
@Override
public String getName() {
employees.add("Trevor Page");
return employees.get(0);
}
@Override
public String getSex() {
employees.add("Male");
return employees.get(1);
}
@Override
public void setName(String name) {
// TODO Auto-generated method stub
}
@Override
public void setSex(String sex) {
// TODO Auto-generated method stub
}
@Override
public void setBirthday(Date birthdate) {
// TODO Auto-generated method stub
}
@Override
public Date getBirthday() {
// TODO Auto-generated method stub
return null;
}
public void setJobTitle(String string) {
// TODO Auto-generated method stub
}
public String getJobTitle() {
employees.add("Sr. Software Engineer");
return employees.get(2);
}
public void setOrganization(Google google) {
// TODO Auto-generated method stub
}
public void setOrganization(Microsoft microsoft) {
// TODO Auto-generated method stub
}
@Override
public String getNameOfOrganization() {
employees.add("Google");
return employees.get(3);
}
}
運良く最初のテストを実行することができました。単体テストが私の値をテストする方法を知っているかどうかはわかりません。