Link to repoТестирование модулей не выполняется, когда тесты выполняются как заданные?
Я обучения Java Модульное тестирование, и написал несколько модульных тестов для некоторых алгоритмов.
При запуске модульных тестов по отдельности, они проходят нормально, но когда я запускаю их как набор, только первый один проходит, и остальные из них не удается.
Например, Test1, Test2 и Test3 выполняются как набор; то Test1 проходит, а Test2 и Test3 терпят неудачу.
Если я прокомментирую код для Test1 и запустите Test2 и Test3; Test2 проходит, и Test3 терпит неудачу.
Когда я запускаю их индивидуально, все они проходят.
Код для алгоритма:
package com.kbajpai.algorithms.ds;
class Node {
private static Node sInstance;
static {
try {
sInstance = new Node();
} catch (Exception e) {
throw new RuntimeException("Could not create singleton instance");
}
}
static Node getInstance() {
return sInstance;
}
private long mData;
private int mCount;
private Node mLeft;
private Node mRight;
private Node() {
mCount = 0;
mLeft = null;
mRight = null;
}
private Node(long data) {
mData = data;
mLeft = null;
mRight = null;
mCount = 1;
}
public String toString() {
StringBuilder sb = new StringBuilder();
if (mCount == 0) {
return "";
} else {
if (mLeft != null) {
sb.append(mLeft.toString()).append(",");
}
sb.append(mData).append(":").append(mCount);
if (mRight != null) {
sb.append(",").append(mRight.toString());
}
}
return sb.toString();
}
private void insert(long data) {
if (mCount == 0) {
mData = data;
mCount++;
} else {
if (data == mData) {
mCount++;
} else if (data > mData) {
if (mRight != null) {
mRight.insert(data);
} else {
mRight = new Node(data);
}
} else {
if (mLeft != null) {
mLeft.insert(data);
} else {
mLeft = new Node(data);
}
}
}
}
String getScores(long[] data) {
for (long aData : data) {
insert(aData);
}
return toString();
}
}
Код для UnitTests:
package com.kbajpai.algorithms.ds;
import com.kbajpai.datagen.ds.ScoreStatsData;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import static junit.framework.TestCase.assertTrue;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class NodeTest {
@Test
public void test01ScoreStats_Ten() throws Exception {
long[] data = ScoreStatsData.getInstance().getNumbers(ScoreStatsData.FILE_TEN);
String expected = ScoreStatsData.getInstance().getStats(ScoreStatsData.FILE_TEN_STATS);
assertTrue(expected.equals(Node.getInstance().getScores(data)));
}
@Test
public void test02ScoreStats_Hundred() throws Exception {
long[] data = ScoreStatsData.getInstance().getNumbers(ScoreStatsData.FILE_HUNDRED);
String expected = ScoreStatsData.getInstance().getStats(ScoreStatsData.FILE_HUNDRED_STATS);
String actual = Node.getInstance().getScores(data);
assertTrue(expected.equals(actual));
}
@Test
public void test03ScoreStats_Thousand() throws Exception {
long[] data = ScoreStatsData.getInstance().getNumbers(ScoreStatsData.FILE_THOUSAND);
String expected = ScoreStatsData.getInstance().getStats(ScoreStatsData.FILE_THOUSAND_STATS);
String actual = Node.getInstance().getScores(data);
assertTrue(expected.equals(actual));
}
@Test
public void test04ScoreStats_Million() throws Exception {
long[] data = ScoreStatsData.getInstance().getNumbers(ScoreStatsData.FILE_MILLION);
String expected = ScoreStatsData.getInstance().getStats(ScoreStatsData.FILE_MILLION_STATS);
String actual = Node.getInstance().getScores(data);
assertTrue(expected.equals(actual));
}
@Test
public void test05ScoreStats_TenMillion() throws Exception {
long[] data = ScoreStatsData.getInstance().getNumbers(ScoreStatsData.FILE_TEN_MILLION);
String expected = ScoreStatsData.getInstance().getStats(ScoreStatsData.FILE_TEN_MILLION_STATS);
String actual = Node.getInstance().getScores(data);
assertTrue(expected.equals(actual));
}
}
N.B:
- Использование Gradle с IntelliJ IDEA
- Link to repo
Возможно, это потому, что вы используете одиночные игры повсюду. Поскольку «Node» - это Singleton, вы не создаете новый в каждом тестовом сценарии, но снова используете тот же самый из предыдущего теста и который содержит все записи, добавленные до этого, конечно. – Pox