[英]NullPointerException during unit test
我試圖對覆蓋文件的覆蓋方法進行單元測試(如果給定的文件不存在,則創建一個新的覆蓋方法)。 我的想法是在覆蓋之前和覆蓋之后與數組進行比較,因此我做到了,但是不幸的是(一如既往)發生了NPE。
這是我要測試的類的方法:
package rankingsystem;
import contentfile.ContentFileRetriever;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
public class RankingSystemService {
private static final int FIRST_PART = 0;
private static final int SECOND_PART = 1;
private ContentFileRetriever contentFileRetriever;
public RankingSystemService(ContentFileRetriever contentFileRetriever) {
this.contentFileRetriever = contentFileRetriever;
}
...
String[] retrieveRankingData(String rankingPathFile) {
return contentFileRetriever.getContentFile(rankingPathFile);
}
void overwriteFileWithGivenResult(String name, long timeOfFinishingGame, String rankingPathFile) {
try (FileWriter writer = new FileWriter(rankingPathFile, true);
BufferedWriter bufferedWriter = new BufferedWriter(writer)) {
bufferedWriter.write(name + " " + timeOfFinishingGame);
bufferedWriter.newLine();
} catch (IOException e) {
e.printStackTrace();
}
}
}
這是ContentFileRetriever
類:
package contentfile;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class ContentFileRetrieverService implements ContentFileRetriever {
@Override
public String[] getContentFile(String pathName) {
Stream<String> contentFileStream;
try {
contentFileStream = Files.lines(Paths.get(pathName));
} catch (IOException e) {
throw new IllegalArgumentException(e);
}
return contentFileStream.toArray(String[]::new);
}
}
這是測試:
package rankingsystem;
import contentfile.ContentFileRetriever;
import contentfile.ContentFileRetrieverService;
import org.junit.Test;
import org.mockito.Mock;
import java.util.LinkedHashMap;
import java.util.Map;
import static org.junit.Assert.*;
public class RankingSystemServiceTest {
@Mock
ContentFileRetrieverService contentFileRetrieverService;
private RankingSystemService rankingSystemService = new RankingSystemService(contentFileRetrieverService);
...
@Test
public void overwriteFileWithGivenResult() {
String pathFile = "src\\test\\java\\resources\\RankingFile.txt";
String[] beforeOverwriting = rankingSystemService.retrieveRankingData(pathFile);
String[] expectedResultBeforeOverwriting = {};
assertArrayEquals(expectedResultBeforeOverwriting, beforeOverwriting);
rankingSystemService.overwriteFileWithGivenResult("Piotr", 1L, pathFile);
String[] afterOverwriting = rankingSystemService.retrieveRankingData(pathFile);
String[] expectedResultAfterOverwriting = {"Piotr 1"};
assertArrayEquals(expectedResultAfterOverwriting, afterOverwriting);
}
}
這是堆棧跟蹤:
java.lang.NullPointerException
at rankingsystem.RankingSystemService.retrieveRankingData(RankingSystemService.java:38)
at rankingsystem.RankingSystemServiceTest.overwriteFileWithGivenResult(RankingSystemServiceTest.java:39)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
我做錯了什么?
我在評論人員的幫助下解決了這個問題。 需要添加:
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
rankingSystemService = new RankingSystemService(contentFileRetrieverService);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.