大家好,我想知道你们可能能够帮助我解决一些我遇到过的Java问题。我正在开展一个涉及几个跟踪机场不同方面的课程的项目,我所遇到的问题围绕着试点课程。根据我的测试,我的问题是:
我已经尝试根据我的教科书如何解释所有这些来解决所有这些,但我还没有运气。不幸的是,该项目的测试不包含任何有用的信息。感谢您提供任何意见和建议。
/**
* Pilot.java
**/
//Imports below
/**
* Class to store information about airplane pilots.
*
* @author Nicholas Thomas
* @version 04/4/2018
*/
public class Pilot
{
//Instance variables below
private String name;
private String license;
/** No-arg constructor for pilot class.
* No parameter constructor for objects of class Pilot.
*/
public Pilot()
{
name = "";
license = "";
}
/** Constructor for pilot class using name and license.
* Pilot Constructor
*
* @param name A parameter
* @param license A parameter
*/
public Pilot(String name, String license)
{
this.name = name;
this.license = license;
}
/** Mutator to modify the name field.
* Method setName
*
* @param name A parameter
*/
public void setName(String name)
{
this.name = name;
name = "";
}
/** Mutator to modify the license field.
* Method setLicense
*
* @param license A parameter
*/
public void setLicense(String license)
{
this.license = license;
license = "";
}
/** Accessor for the name instance.
* Method getName
*
* @return The return value
*/
public String getName()
{
return name;
}
/** Accessor for the license instance.
* Method getLicense
*
* @return The return value
*/
public String getLicense()
{
return license;
}
/** Method to copy.
* Method copy
*
* @return The return value
*/
public Pilot copy()
{
Pilot p1 = new Pilot(name, license);
Pilot p2;
p2 = p1.copy();
return p2;
}
/** Method to convert to string.
* Method toString
*
* @return The return value
*/
public String toString()
{
String p1 = "Name: " + name + " - "
+ "License: " + license;
return p1;
}
/** Method to determine if something equals something.
* Method equals
*
* @param pilot A parameter
* @return The return value
*/
public boolean equals(Pilot pilot)
{
return true;
}
}
我不确定它是否对任何人有帮助,但这是我正在运行的测试代码。
/**
* TestPrelab2.java
*/
import static org.junit.Assert.fail;
import org.junit.Test;
import org.junit.Rule;
import org.junit.rules.Timeout;
/**
* Describe TestPrelab2 here.
*
* @author Joel Swanson
* @version 03.07.2014
*/
public class TestPrelab2
{
@Rule
public Timeout timeout = new Timeout(30000);
/**
* Check mutators to make sure setName and setLicense work
* properly.
*/
@Test
public void checkAccessorsMutators001()
{
checkNameAMNormal("Tom");
checkNameAMNull();
checkLicenseAMNormal("1010A");
checkLicenseAMNull();
}
/**
* Check the constructors.
*/
@Test
public void checkConstructors002()
{
checkNoArgConstructor();
checkArgConstructor("Tom", "12345-2");
checkArgConstructor("Bill", "12A345");
}
/**
* Test the copy method.
*/
@Test
public void checkCopy003()
{
checkCopy("Tom", "12345-2");
checkCopy("Bill", "12A345");
}
/**
* Test the copy method with data.
* @param testName The data to put in for name.
* @param testLicense The data to put in for ssn.
*/
public void checkCopy(String testName, String testLicense)
{
String fb = "";
Pilot pilot1 = new Pilot(testName, testLicense);
Pilot pilot2 = pilot1.copy();
if (pilot2 == null)
{
fb += "Fail in TestPrelab2.\n";
fb += "The copy method returned a null value.\n";
fail(fb);
}
else if (pilot1 == pilot2)
{
fb += "Fail in TestPrelab2.\n";
fb += "The copy method returned the actual pilot object\n"
+ "instead of making and returning a copy of the object.\n";
fail(fb);
}
else if (!pilot1.getName().equals(pilot2.getName()))
{
fb += "Fail in TestPrelab2.\n";
fb += "The copy method returned a pilot object with a name\n";
fb += "that is different than the original pilot object.\n";
fail(fb);
}
else if (!pilot1.getLicense().equals(pilot2.getLicense()))
{
fb += "Fail in TestPrelab2.\n";
fb += "The copy method returned a pilot object with a license\n";
fb += "that is different than the original pilot object.\n";
fail(fb);
}
}
/**
* Check the toString method.
*/
@Test
public void checkToString004()
{
String fb = "";
Pilot pilot = new Pilot("Alice", "112233");
String data = pilot.toString();
if (data == null)
{
fb += "Fail in TestPrelab2.\n";
fb += "The toString method returned a null value.\n";
fail(fb);
}
else if (data.contains("\n") || data.contains("\t"))
{
fb += "Fail in TestPrelab2.\n";
fb += "The toString method returned incorrect data.\n";
fb += "The value from toString should not contain tab"
+ " or newline characters.\n";
fail(fb);
}
else if (!data.equals("Name: Alice - License: 112233"))
{
fb += "Fail in TestPrelab2.\n";
fb += "The toString method returned incorrect data.\n";
fb += "Expected: Name: Alice - License: 112233\n";
fb += "Your value: " + data + "\n";
fb += "Careful with spacing.\n";
fail(fb);
}
pilot = new Pilot("Tommy", "555555");
data = pilot.toString();
if (data == null)
{
fb += "Fail in TestPrelab2.\n";
fb += "The toString method returned a null value.\n";
fail(fb);
}
else if (data.contains("\\n") || data.contains("\\t"))
{
fb += "Fail in TestPrelab2.\n";
fb += "The toString method returned incorrect data.\n";
fb += "The value from toString should not contain tab"
+ " or newline characters";
fail(fb);
}
else if (!data.equals("Name: Tommy - License: 555555"))
{
fb += "Fail in TestPrelab2.\n";
fb += "The toString method returned incorrect data.\n";
fb += "Expected: Name: Tommy - License: 555555\n";
fb += "Your value: " + data + "\n";
fb += "Careful with spacing.\n";
fail(fb);
}
}
/**
* Check the equals method.
*/
@Test
public void checkEquals005()
{
String fb = "";
String aliceB = "AliceB";
String licenseB = "112233B";
Pilot pilot1 = new Pilot("Alice", "112233");
Pilot pilot2 = new Pilot(aliceB.substring(0, 5),
licenseB.substring(0, 6));
if (!pilot1.equals(pilot2))
{
fb += "Fail in TestPrelab2.\n";
fb += "The equals method returned false when name and\n";
fb += "license are the same in two different objects.\n";
fb += "Make sure you are not using == to compare strings.\n";
fail(fb);
}
pilot1 = new Pilot("Alice", "112233");
pilot2 = new Pilot("Bill", licenseB.substring(0, 6));
if (pilot1.equals(pilot2))
{
fb += "Fail in TestPrelab2.\n";
fb += "The equals method returned true when name is different\n";
fb += "but license is the same in two different objects.\n";
fail(fb);
}
pilot1 = new Pilot("Alice", "112233");
pilot2 = new Pilot(aliceB.substring(0, 5), "223344");
if (pilot1.equals(pilot2))
{
fb += "Fail in TestPrelab2.\n";
fb += "The equals method returned true when name is the same\n";
fb += "but license is different in two different objects.\n";
fail(fb);
}
pilot1 = new Pilot("Alice", "112233");
pilot2 = new Pilot("Bill", "223344");
if (pilot1.equals(pilot2))
{
fb += "Fail in TestPrelab2.\n";
fb += "The equals method returned true when name is different\n";
fb += "and license is different in two different objects.\n";
fail(fb);
}
}
/**
* Check the name accessor and mutator with normal valid data.
* @param testData The name to set for testing.
*/
public void checkNameAMNormal(String testData)
{
String fb = "";
Pilot pilot = new Pilot();
pilot.setName(testData);
String setData = pilot.getName();
if (setData == null)
{
fb += "Fail in TestPrelab2.\n";
fb += "Name field is null after running setName\n";
fb += "and getName with valid data.\n";
fb += "Name accessor or mutator is incorrect.\n";
fail(fb);
}
else if (!setData.equals(testData))
{
fb += "Fail in TestPrelab2.\n";
fb += "Name field is incorrect after running\n";
fb += "setName and getName with valid data.\n";
fb += "Name accessor or mutator is incorrect.\n";
fail(fb);
}
}
/**
* Check the license accessor and mutator for proper operation.
* @param testData The license to set for testing.
*/
public void checkLicenseAMNormal(String testData)
{
String fb = "";
Pilot pilot = new Pilot();
pilot.setLicense(testData);
String setData = pilot.getLicense();
if (setData == null)
{
fb += "Fail in TestPrelab2.\n";
fb += "License field is null after running setLicense\n";
fb += "and getLicense with valid data.\n";
fb += "License accessor or mutator is incorrect.\n";
fail(fb);
}
else if (!setData.equals(testData))
{
fb += "Fail in TestPrelab2.\n";
fb += "License field is incorrect after running\n";
fb += "setLicense and getLicense with valid data.\n";
fb += "License accessor or mutator is incorrect.\n";
fail(fb);
}
}
/**
* Make sure the mutator does not allow null data.
*/
public void checkNameAMNull()
{
String fb = "";
Pilot pilot = new Pilot();
pilot.setName("ABCD");
pilot.setName(null);
String setData = pilot.getName();
if (setData == null)
{
fb += "Fail in TestPrelab2.\n";
fb += "Name field is null after running setName"
+ " and getName with null data.\n";
fb += "Make sure mutator sets name to empty"
+ " string on null data.\n";
fb += "Make sure accessor isn't incorrectly"
+ " returning null values.\n";
fail(fb);
}
else if (!setData.equals(""))
{
fb += "Fail in TestPrelab2.\n";
fb += "Name field is not empty string after running"
+ " setName and getName with null data.\n";
fb += "Make sure the mutator sets name to empty"
+ " string on null data.\n";
fb += "Make sure the accessor isn't incorrectly"
+ " returning the wrong value.\n";
fail(fb);
}
}
/**
* Make sure the mutator does not allow null data.
*/
public void checkLicenseAMNull()
{
String fb = "";
Pilot pilot = new Pilot();
pilot.setLicense("ABCD");
pilot.setLicense(null);
String setData = pilot.getLicense();
if (setData == null)
{
fb += "Fail in TestPrelab2.\n";
fb += "License field is null after running setlicense"
+ " and getLicense with null data.\n";
fb += "Make sure mutator sets license to empty"
+ " string on null data.\n";
fb += "Make sure accessor isn't incorrectly"
+ " returning null values.\n";
fail(fb);
}
else if (!setData.equals(""))
{
fb += "Fail in TestPrelab2.\n";
fb += "License field is not empty string after running"
+ " setLicense and getLicense with null data.\n";
fb += "Make sure the mutator sets license to empty"
+ " string on null data.\n";
fb += "Make sure the accessor isn't incorrectly"
+ " returning the wrong value.\n";
fail(fb);
}
}
/**
* Test argument constructor.
*
* @param name The name to test with this Pilot.
* @param license The license to test with this Pilot.
*/
public void checkArgConstructor(String name, String license)
{
String fb = "";
Pilot pilot = new Pilot(name, license);
if (!pilot.getName().equals(name))
{
fb += "Fail in TestPrelab2.\n";
fb += "Pilot argument constructor improperly set name.\n";
fail(fb);
}
if (!pilot.getLicense().equals(license))
{
fb += "Fail in TestPrelab2.\n";
fb += "Pilot argument constructor improperly set name.\n";
fail(fb);
}
}
/**
* Test the no-arg constructor. Should set the fields
* to empty strings.
*/
public void checkNoArgConstructor()
{
String fb = "";
Pilot pilot = new Pilot();
if (pilot.getName() == null)
{
fb += "Fail in TestPrelab2.\n";
fb += "Pilot no-arg constructor did not set name"
+ " field to empty string.\n";
fail(fb);
}
if (pilot.getLicense() == null)
{
fb += "Fail in TestPrelab2.\n";
fb += "Pilot no-arg constructor did not set license "
+ "field to empty string.\n";
fail(fb);
}
}
}
答案 0 :(得分:1)
1)TestPrelab2失败。运行setName后,name字段为null,带有null数据的getName。确保mutator在null数据上将name设置为空字符串。确保访问者没有错误地返回空值:将通过以下更改来修复 -
public Pilot(String name, String license){
setName(name);
setLicense(license);
}
public void setLicense(String license) {
this.license = (license == null) ? "" : license;
}
public void setName(String name) {
this.name = (name == null) ? "" : name;
}
2)TestPrelab2失败。当name不同但是两个不同对象中的license相同时,equals方法返回true:Refactor always true method -
public boolean equals(Pilot pilot)
{
//return true;
return this.name.equals(pilot.getName()) && this.license.equals(pilot.getLicense());
}
3)我的复制方法也失败了,但我没有得到任何解释为什么。重构 -
public Pilot copy()
{
return new Pilot(name, license);
}