我已經為我在 SNHU 的計算機科學課程創建了這個 Java 專案,并且對為什么在對代碼運行 JUnit5 測驗時遇到這些錯誤感到困惑和困惑。我在運行 JUnit5 測驗時收到的錯誤是:
org.opentest4j.AssertionFailedError: First name was not null. == > expected: not < null >
at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java: 39)
at org.junit.jupiter.api.Assertions.fail(Assertions.java: 134)
at org.junit.jupiter.api.AssertNotNull.failNull(AssertNotNull.java: 47)
at org.junit.jupiter.api.AssertNotNull.assertNotNull(AssertNotNull.java: 36)
at org.junit.jupiter.api.Assertions.assertNotNull(Assertions.java: 308)
at module3.ContactTest.testContactFirstNameNotNull(ContactTest.java: 76)
at java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 64)
at java.base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 43)
at java.base / java.lang.reflect.Method.invoke(Method.java: 564)
at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java: 725)
at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java: 60)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java: 131)
at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java: 149)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java: 140)
at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java: 84)
at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java: 115)
at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java: 105)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java: 106)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java: 64)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java: 45)
at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java: 37)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java: 104)
at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java: 98)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java: 214)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java: 73)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java: 210)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java: 135)
at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java: 66)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java: 151)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java: 73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java: 141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java: 137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java: 139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java: 73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java: 138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java: 95)
at java.base / java.util.ArrayList.forEach(ArrayList.java: 1511)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java: 41)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java: 155)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java: 73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java: 141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java: 137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java: 139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java: 73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java: 138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java: 95)
at java.base / java.util.ArrayList.forEach(ArrayList.java: 1511)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java: 41)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java: 155)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java: 73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java: 141)
at org.junit.platform.engine.support.hierarchical.Node.around(Node.java: 137)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java: 139)
at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java: 73)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java: 138)
at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java: 95)
at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java: 35)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java: 57)
at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java: 54)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java: 107)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java: 88)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java: 54)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java: 67)
at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java: 52)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java: 114)
at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java: 95)
at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java: 91)
at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java: 60)
at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java: 98)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java: 40)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java: 529)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java: 756)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java: 452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java: 210)
我在 Eclipse 中運行這個專案并且是最新的軟體。以下是此作業的說明和代碼。先感謝您。
指示:
概述
正如您在模塊一和模塊二中所了解的,可以針對給定情況采用各種型別的軟體測驗。對于本作業,您將使用代碼創建單元測驗以發現移動應用程式的錯誤。您將開發聯系服務和聯系物件。
迅速的
對于將在模塊六中到期的專案一,您被要求為客戶開發一個移動應用程式。客戶將向您提供要求。您的作業是撰寫應用程式代碼并提供單元測驗以驗證應用程式是否滿足客戶的要求。對于這個里程碑,您將專注于提供聯系服務。這些服務的目的是在應用程式中添加、更新和洗掉聯系人物件。
聯系人服務使用記憶體中的資料結構來支持存盤聯系人(不需要資料庫)。此外,此里程碑沒有用戶界面。您將通過 JUnit 測驗驗證聯系服務。聯系服務包含聯系物件以及聯系服務。要求概述如下。
接觸類要求
- 聯系人物件應具有要求的唯一聯系人 ID 字串,不能超過 10 個字符。聯系人 ID 不得為空且不可更新。
- 聯系人物件應具有不能超過 10 個字符的必需的 firstName String 欄位。firstName 欄位不得為空。
- 聯系人物件應具有不能超過 10 個字符的必需的姓氏字串欄位。lastName 欄位不得為空。
- 聯系人物件應有一個必需的電話字串欄位,該欄位必須正好是 10 位數字。電話欄位不得為空。
- 聯系人物件應有一個不超過 30 個字符的必填地址欄位。地址欄位不應為空。
聯系服務要求
- 聯系人服務應該能夠添加具有唯一 ID 的聯系人。
- 聯系人服務應能夠洗掉每個聯系人 ID 的聯系人。
- 聯系人服務應能夠洗掉每個聯系人 ID 的聯系人。
- 聯系服務應能夠更新每個聯系 ID 的聯系欄位。以下欄位是可更新的:
- 名
- 姓
- 數字
- 地址
聯系方式.java
//Description: This is the contact class. It creates and stores contact information.
package module3;
public class Contact {
String contactID;
String firstName;
String lastName;
String phoneNumber;
String address;
public Contact(String contactID, String firstName, String lastName, String phoneNumber) {
super();
this.contactID = contactID;
this.firstName = firstName;
this.lastName = lastName;
this.phoneNumber = phoneNumber;
this.address = address;
}
public String getContactID() {
return contactID;
}
public void setContactID(String contactID) {
this.contactID = contactID;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Contact [contactID=" contactID ", firstName=" firstName ", lastName=" lastName
", phoneNumber=" phoneNumber ", address=" address "]";
}
}
聯系服務.java:
//Description: This is the contact service. It maintains a list of contacts and has capabilities
//for adding and deleting contacts, as well as updating first name, last name, phone number, and address.
package module3;
import java.util.ArrayList;
public class ContactService {
//will contain our list of contacts
private ArrayList<Contact> contacts;
public ContactService()
{
//beginning call for the array list
contacts = new ArrayList<>();
}
//need to have an add contact, remove contact and update contact feature
//set add contact to have all values
public boolean addContact(Contact contact){
boolean contactAlready= false;
//run through all the contacts in the list made
for (Contact contactList:contacts)
{
//test to see if already a contact
//if so make contactAlready true
if (contactList.equals(contact))
{
contactAlready = true;
}
}
//if not a contact add it as one
if (!contactAlready)
{
contacts.add(contact);
//after adding is now true
return true;
}
else
{
return false;
}
}
//delete needed via contactID
public boolean deleteContact(String string)
{
//run through list of contacts
for (Contact contactList:contacts)
{
//if equals to contactID will remove and return
if (contactList.getContactID().equals(string))
{
//remove and return true
contacts.remove(contactList);
return true;
}
}
//else return false
return false;
}
//update is trickiest due to needing to make sure still fits parameters
//nothing means no change
public boolean updateContact(String contactID, String firstName, String lastName, String phoneNumber, String address)
{
//run through loop again
for (Contact contactList:contacts)
{
//if contactID matches, run through each with making sure not "" and meets requirements
//then return true as it did equal update.
if (contactList.getContactID().equals(contactID))
{
if(!firstName.equals("") && !(firstName.length()>10))
{
contactList.setFirstName(firstName);
}
if(!lastName.equals("") && !(lastName.length()>10))
{
contactList.setFirstName(lastName);
}
if(!phoneNumber.equals("") && (phoneNumber.length()==10))
{
contactList.setFirstName(phoneNumber);
}
if(!address.equals("") && !(address.length()>30))
{
contactList.setFirstName(address);
}
return true;
}
}
//else return false
return false;
}
}
ContactTest.java:
//Description: This is the unit tests for the contact class (ContactTest).
package module3;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;
import static org.junit.jupiter.api.Assertions.*;
public class ContactTest {
/*
* The following tests exercise the Contact class.
* The first 5 tests to make sure the field does not become longer than the constraint
* (10 characters for first and last name, exactly 10 characters for phone number,
* and 30 characters for the address).
* The last 4 tests ensure that each field is not null.
* ContactID is not tested for being not null because there isn't a way to create
* a contact with a null contactID. Likewise it is not tested for being non-updateable
* because there is no way to update it.
*/
@Test
@DisplayName("Contact ID cannot have more than 10 characters")
void testContactIDWithMoreThanTenCharacters() {
Contact contact = new Contact("FirstName","LastName","PhoneNumbr","Address");
if(contact.getContactID().length() > 10) {
fail("Contact ID has more than 10 characters.");
}
}
@Test
@DisplayName("Contact First Name cannot have more than 10 characters")
void testContactFirstNameWithMoreThanTenCharacters() {
Contact contact = new Contact("OllyOllyOxenFree","LastName","PhoneNumbr","Address");
if(contact.getFirstName().length() > 10) {
fail("First Name has more than 10 characters.");
}
}
@Test
@DisplayName("Contact Last Name cannot have more than 10 characters")
void testContactLastNameWithMoreThanTenCharacters() {
Contact contact = new Contact("FirstName","OllyOllyOxenFree","PhoneNumbr","Address");
if(contact.getLastName().length() > 10) {
fail("Last Name has more than 10 characters.");
}
}
@Test
@DisplayName("Contact phone number is exactly 10 characters")
void testContactNumberWithMoreThanTenCharacters() {
Contact contact = new Contact("FirstName", "LastName", "55555555555","Address");
if(contact.getPhoneNumber().length() != 10) {
fail("Phone number length does not equal 10.");
}
}
@Test
@DisplayName("Contact address cannot have more than 30 characters")
void testContactAddressWithMoreThanThirtyCharacters() {
Contact contact = new Contact("FirstName","LastName","PhoneNumbr","123456789 is nine characters long"
"123456789 is another nine characters long");
if(contact.getAddress().length() > 30) {
fail("Address has more than 30 characters.");
}
}
@Test
@DisplayName("Contact First Name shall not be null")
void testContactFirstNameNotNull() {
Contact contact = new Contact(null, null, null, null);
assertNotNull(contact.getFirstName(), "First name was not null.");
}
@Test
@DisplayName("Contact Last Name shall not be null")
void testContactLastNameNotNull() {
Contact contact = new Contact(null, null, null, null);
assertNotNull(contact.getLastName(), "Last name was null.");
}
@Test
@DisplayName("Contact Phone Number shall not be null")
void testContactPhoneNotNull() {
Contact contact = new Contact("FirstName", "LastName", null,"Address");
assertNotNull(contact.getPhoneNumber(), "Phone number was null.");
}
@Test
@DisplayName("Contact Address shall not be null")
void testContactAddressNotNull() {
Contact contact = new Contact(null, null, null, null);
assertNotNull(contact.getAddress(), "Address was null.");
}
}
聯系服務測驗.java:
//Description: This is the unit tests for the contact service (ContactServiceTest)
package module3;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class ContactServiceTest {
//need to test add, delete and update
//templates
/*
* Contact("1413252", "Jane", "Doe", "4444444444", "Sample 24 Drive");
Contact("1309403", "Malleus", "Draconia", "2187123404", "Valley of Thorns");
Contact("9752319", "Vil", "Schoenheit", "9215501793", "Land of Proxynee");
*/
@Test
public void testAdd()
{
ContactService cs = new ContactService();
Contact test1 = new Contact("1413252", "Jane", "Doe", "4444444444");
assertEquals(true, cs.addContact(test1));
}
@Test
public void testDelete()
{
ContactService cs = new ContactService();
Contact test1 = new Contact("1413252", "Jane", "Doe", "4444444444");
Contact test2 = new Contact("1309403", "Malleus", "Draconia", "2187123404");
Contact test3 = new Contact("9752319", "Vil", "Schoenheit", "9215501793");
cs.addContact(test1);
cs.addContact(test2);
cs.addContact(test3);
assertEquals(true, cs.deleteContact("1309403"));
assertEquals(false, cs.deleteContact("1309404"));
assertEquals(false, cs.deleteContact("1309403"));
}
@Test
public void testUpdate()
{
ContactService cs = new ContactService();
Contact test1 = new Contact("1413252", "Jane", "Doe", "4444444444");
Contact test2 = new Contact("1309403", "Malleus", "Draconia", "2187123404");
Contact test3 = new Contact("9752319", "Vil", "Schoenheit", "9215501793");
cs.addContact(test1);
cs.addContact(test2);
cs.addContact(test3);
assertEquals(true, cs.updateContact("9752319", "VilFirst", "SchoenheitLast", "9215501793", "Land of Proxynee"));
assertEquals(false, cs.updateContact("9752322", "VilFirst", "SchoenheitLast", "9215501793", "Land of Proxynee"));
}
}
uj5u.com熱心網友回復:
在瀏覽了你的代碼之后,我可以找出這些錯誤,因為你的測驗失敗了。
測驗 1
@Test
@DisplayName("Contact address cannot have more than 30 characters")
void testContactAddressWithMoreThanThirtyCharacters() {
Contact contact = new Contact("FirstName","LastName","PhoneNumbr","123456789 is nine characters long"
"123456789 is another nine characters long");
System.out.println("contact address i ---------" contact.getAddress().length());
if(contact.getAddress().length() > 30) {
fail("Address has more than 30 characters.");
}
}
失敗的原因:
創建物件聯系人時,您沒有為地址傳遞值,因為您的建構式只有這些值:
public Contact(String contactID, String firstName, String lastName, String phoneNumber)
因此,默認情況下,您的地址值僅為 null。當您對空物件應用任何方法呼叫時(contact.getAddress().length()),它會給出空指標例外。
測驗 2
@Test
@DisplayName("Contact phone number is exactly 10 characters")
void testContactNumberWithMoreThanTenCharacters() {
Contact contact = new Contact("FirstName", "LastName", "5555555555","Address");
if(contact.getPhoneNumber().length() != 10) {
fail("Phone number length does not equal 10.");
}
}
失敗的原因:
您傳遞的是字串地址而不是您的電話號碼:您必須糾正您的測驗才能通過
@Test
@DisplayName("Contact phone number is exactly 10 characters")
void testContactNumberWithMoreThanTenCharacters() {
Contact contact = new Contact("FirstName", "LastName", "Address","5555555555");
System.out.println("contact digits i ---------" contact.getPhoneNumber().length() );
if(contact.getPhoneNumber().length() != 10) {
fail("Phone number length does not equal 10.");
}
}
此外,如果不是在運行每個測驗之前創建一個新物件,您實際上應該使用@Before 注釋在運行每個測驗之前創建初始化條件。
整改:
@Test
@DisplayName("Contact address cannot have more than 30 characters")
void testContactAddressWithMoreThanThirtyCharacters() {
Contact c1 = new Contact("FirstName","LastName","value is","PhoneNumbr","address is longer than 30 characters ");
System.out.println("contact address i ---------" c1.getAddress().length());
System.out.println("contact address i ---------" c1.getAddress());
System.out.println(c1);
assertTrue(c1.getAddress().length() > 30);
}
完成這些整改后,所有測驗通過

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/421462.html
標籤:
