gpt4 book ai didi

java - 测试在单独运行时通过,但在整个测试类运行时不通过

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:32:20 26 4
gpt4 key购买 nike

我已经解决了一个 topCoder 问题,当我自己运行它们时,所有测试都通过了。尽管如此,当我运行整个测试类时,其中一些失败了。你能帮我找出这种行为的原因吗?这是我的类(class)和测试:

 package com.topcoder.div2.stage1;

import java.util.Arrays;

public class GameOfStones {
private int iterations = 0;
public int count(int[] stones){
int result = checkEquality(stones);
return result;
}

private int checkEquality(int[] stones){
int count = 0;
int sum = 0;
for(int k = 0; k< stones.length;k++){
sum += stones[k];
}
if(stones.length > 0) {
for (int i = 0; i < sum; i++) {
Arrays.sort(stones);
if(stones[stones.length-1] != 3) {
int j = 0;
while (j < stones.length - 1) {
if (stones[j] == stones[j + 1]) {
count++;
}
j++;
}
if (count == stones.length - 1) {
return iterations;
}
stones[0] = stones[0] + 2;
stones[stones.length - 1] = stones[stones.length - 1] - 2;
iterations++;
count = 0;
}
}
}
return -1;
}
}

测试:

package com.topcoder.div2.stage1;

import org.testng.annotations.Test;

import static org.testng.Assert.assertEquals;

public class GameOfStonesTest {
private GameOfStones gameOfStones = new GameOfStones();

@Test
public void test1() {
int expected = 0;
int[] given = {17};

int actual = gameOfStones.count(given);

assertEquals(expected, actual);
}

@Test
public void test2() {
int expected = 3;
int[] given ={7, 15, 9, 5};

int actual = gameOfStones.count(given);
assertEquals(actual, expected);
}

@Test
public void test3() {
int expected = -1;
int[] given ={2, 8, 4};

int actual = gameOfStones.count(given);
assertEquals(actual, expected);
}

@Test
public void test4() {
int expected = -1;
int[] given ={10, 15, 20, 12, 1, 20};

int actual = gameOfStones.count(given);
assertEquals(actual, expected);
}

@Test
public void test5(){
int expected = 277;
int[] given ={17, 1, 27, 29, 13, 1, 27, 3, 19, 3, 25, 1, 11, 9, 7, 17, 31, 25, 5, 11, 31, 9,
15, 3, 3, 3, 11, 11, 1, 41, 5, 95, 7, 3, 41, 31, 7, 13, 15, 5, 17, 3, 9, 3, 11,
27, 1, 23, 15, 5, 43, 11, 17, 7, 1, 3, 13, 69, 3, 43, 21, 1, 25, 1, 3, 11, 5, 43,
13, 7, 15, 1, 1, 55, 37, 9, 5, 7, 21, 3, 23, 15, 1, 9, 3, 35, 13, 17, 7, 17, 27, 5,
9, 19, 13, 1, 1, 1, 29};
int actual = gameOfStones.count(given);
assertEquals(actual, expected);
}

@Test
public void test6(){
int expected = 539;
int[] given ={1, 29, 11, 35, 57, 15, 85, 19, 5, 47, 53, 5, 63, 19, 13, 63, 27, 43, 53, 75, 67, 93, 33, 31, 47, 3,
63, 17, 11, 53, 35, 23, 17, 45, 31, 19, 63, 75, 5, 3, 49, 19, 11, 89, 21, 69,
71, 5, 45, 81, 31, 13, 11, 19, 7, 99, 33, 63, 19, 57, 73, 29, 35, 9, 47,
1, 17, 7, 13, 31, 5, 85, 95, 23, 45, 65, 63, 41, 81, 33, 45, 1, 15,
45, 19, 87, 51, 7, 13, 39, 1, 59, 29, 35, 1, 43};
int actual = gameOfStones.count(given);
assertEquals(actual, expected);
}

@Test
public void test7() {
int expected = 0;
int[] given ={100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
100, 100};
int actual = gameOfStones.count(given);
assertEquals(actual, expected);
}

@Test
public void test8() {
int expected = 11;
int[] given ={3, 5, 21, 31};
int actual = gameOfStones.count(given);
assertEquals(actual, expected);
}

@Test
public void test9() {
int expected = 13;
int[] given ={44, 6, 46};
int actual = gameOfStones.count(given);
assertEquals(actual, expected);
}

}

P.S 如果您知道任何改进解决方案的建议,我们非常欢迎您将它们包含在您的答案中。

最佳答案

您在所有测试中共享被测类的单个实例。我会删除初始分配并添加:

private GameOfStones gameOfStones; // Don't create an instance here

@BeforeMethod
public void setUp() {
gameOfStones = new GameOfStones();
}

... 将为每个测试使用一个新实例。好的做法是在每次测试后进行清理:

@AfterMethod
public void tearDown() {
gameOfStones = null;
}

在此处给出的示例中,修复导致问题变为方法范围的类范围变量也可以解决问题,但是随着被测软件变得越来越复杂,最好开始进行适当的测试设置和拆除。

关于java - 测试在单独运行时通过,但在整个测试类运行时不通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26561511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com