클래스 MobileStorage은 레트로 휴대 전화의 수신함을 구현 한 것입니다. 이에 따라받은 편지함은 메시지 당 최대 160 자까지 미리 정의 된 최대 용량의 메시지를 보유하도록 지정됩니다. 다음 조작을 지원하고 테스트해야됩니다Eclipse의 TestNG로 단위 테스트 작성
- saveMessage : 다음 자유 위치에서받은 편지함에 새 문자 메시지를 저장합니다. 메시지 텍스트가 160자를 초과하는 경우 메시지가 분할되어 여러 저장 위치에 저장됩니다.
- deleteMessage :받은 편지함에서 가장 오래된 (처음) 모바일 메시지를 제거합니다.
- listMessages : 현재 저장된 모든 메시지의 읽을 수있는 표현을 인쇄합니다. 여러 부분에 저장된 메시지는 표현을 위해 함께 결합됩니다.
첨부 된이 코드에 대한 단위 테스트가 필요합니다. 일반적으로 TestNG 및 단위 테스트에 대해 잘 알고 있지는 않지만 할 수있는 테스트의 몇 가지 예를 들어 도와 주시겠습니까?
mobile_storage \ SRC \ 주 \ 자바 \ MobileMessage.java - https://pastebin.com/RxNcgnSi
/**
* Represents a mobile text message.
*/
public class MobileMessage {
//stores the content of this messages
private final String text;
//in case of multi-part-messages, stores the preceding message
//is null in case of single message
private MobileMessage predecessor;
public MobileMessage(String text, MobileMessage predecessor) {
this.text = text;
this.predecessor = predecessor;
}
public String getText() {
return text;
}
public MobileMessage getPredecessor() {
return predecessor;
}
public void setPredecessor(MobileMessage predecessor) {
this.predecessor = predecessor;
}
}
mobile_storage \ SRC \ 주 \ 자바 \ MobileStorage.java - https://pastebin.com/wuqKgvFD
import org.apache.commons.lang.StringUtils;
import java.util.Arrays;
import java.util.Objects;
import java.util.stream.IntStream;
/**
* Represents the message inbox of a mobile phone.
* Each storage position in the inbox can store a message with 160 characters at most.
* Messages are stored with increasing order (oldest first).
*/
public class MobileStorage {
final static int MAX_MESSAGE_LENGTH = 160;
private MobileMessage[] inbox;
private int occupied = 0;
/**
* Creates a message inbox that can store {@code storageSize} mobile messages.
* @throws IllegalArgumentException in case the passed {@code storageSize} is zero or less
*/
public MobileStorage(int storageSize) {
if(storageSize < 1) {
throw new IllegalArgumentException("Storage size must be greater than 0");
}
this.inbox = new MobileMessage[storageSize];
}
/**
* Stores a new text message to the inbox.
* In case the message text is longer than {@code MAX_MESSAGE_LENGTH}, the message is splitted and stored on multiple storage positions.
* @param message a non-empty message text
* @throws IllegalArgumentException in case the given message is empty
* @throws RuntimeException in case the available storage is too small for storing the complete message text
*/
public void saveMessage(String message) {
if(StringUtils.isBlank(message)) {
throw new IllegalArgumentException("Message cannot be null or empty");
}
int requiredStorage = (int) Math.ceil((double) message.length()/MAX_MESSAGE_LENGTH);
if(requiredStorage > inbox.length || (inbox.length - occupied) <= requiredStorage) {
throw new RuntimeException("Storage Overflow");
}
MobileMessage predecessor = null;
for(int i = 0; i < requiredStorage; i++) {
int from = i * MAX_MESSAGE_LENGTH;
int to = Math.min((i+1) * MAX_MESSAGE_LENGTH, message.length());
String messagePart = message.substring(from, to);
MobileMessage mobileMessage = new MobileMessage(messagePart, predecessor);
inbox[occupied] = mobileMessage;
occupied++;
predecessor = mobileMessage;
}
}
/**
* Returns the number of currently stored mobile messages.
*/
public int getOccupied() {
return occupied;
}
/**
* Removes the oldest (first) mobile message from the inbox.
*
* @return the deleted message
* @throws RuntimeException in case there are currently no messages stored
*/
public String deleteMessage() {
if(occupied == 0) {
throw new RuntimeException("There are no messages in the inbox");
}
MobileMessage first = inbox[0];
IntStream.range(1, occupied).forEach(index -> inbox[index-1] = inbox[index]);
inbox[occupied] = null;
inbox[0].setPredecessor(null);
occupied--;
return first.getText();
}
/**
* Returns a readable representation of all currently stored messages.
* Messages that were stored in multiple parts are joined together for representation.
* returns an empty String in case there are currently no messages stored
*/
public String listMessages() {
return Arrays.stream(inbox)
.filter(Objects::nonNull)
.collect(StringBuilder::new, MobileStorage::foldMessage, StringBuilder::append)
.toString();
}
private static void foldMessage(StringBuilder builder, MobileMessage message) {
if (message.getPredecessor() == null && builder.length() != 0) {
builder.append('\n');
}
builder.append(message.getText());
}
}
같은
귀하의
test.java
보일 수 있습니다 뭔가 당신이 테스트 케이스 또는 그 테스트 케이스 TestNG를 구현을 찾고 있습니다 도움이되기를 바랍니다? – user1207289나는 몇몇 테스트 케이스의 테스트 케이스와 코딩 예제를 찾고있다. – Allx
@ user1207289 제발 도와 주실 수 있습니까? – Allx