所有测试方法都在构造函数中失败 [家庭作业]
All Test Methods Failing at Constructors [Homework]
我有一个超级class和几个子class。出于某种原因,当我 运行 我的 JUnit 测试时,我尝试构建子 class 的所有方法都失败了,当我尝试调试它时,我收到了这条错误消息
Source not found: The JAR of this class file belongs to JUnit 4 which does not allow modifications to source attachments on its entries.
这是我的超级class
public class Sequence {
protected char[] seqarr;
public boolean isValidLetter(char let){
boolean isValid = false;
if (Character.isUpperCase(let) == true || Character.isLowerCase(let) == true){
isValid = true;
}
return isValid;
}
public Sequence(char[] sarr){
boolean check = true;
for (int i = 0; i<sarr.length; i++){
if (isValidLetter(sarr[i]) == false){
check = false;
break;
}
}
if (check == true){
seqarr = sarr;
}
if (check == false){
throw new IllegalArgumentException("Invalid sequence letter for class edu.iastate.cs228.hw1.Sequence"); //Need to figure out how to make this say whatever class it came from
}
}
public int seqLength(){
return seqarr.length;
}
public char[] getSeq(){
char[] seqCopy = seqarr;
return seqCopy;
}
public String toString(){
String stringSeq = "";
for(int i = 0; i < seqarr.length; i++){
stringSeq = stringSeq + seqarr[i];
}
return stringSeq;
}
public boolean equals(Object obj){
boolean check = false;
if (obj != null && (seqarr.toString().toLowerCase() == obj.toString().toLowerCase())){
check = true;
}
return check;
}
}
这是我的一个 classes
public class DNASequence extends Sequence {
@Override
public boolean isValidLetter(char let){
return "aAcCgGtT".indexOf(let) != -1;
}
public DNASequence(char[] dnaarr){
super(dnaarr);
}
}
这是 subclass 的测试用例
public class DNASequenceTest {
char[] testArrOne = {'a','B','c','D'};
@Test
public void testValidLetter() {
String msg = "Method should return true if the character is a/A, c/C, g/G, or t/T";
DNASequence newDNASequence = new DNASequence(testArrOne);
assertEquals(msg, true, newDNASequence.isValidLetter('a'));
}
@Test
public void testValidLetterTwo(){
DNASequence newDNASequence = new DNASequence(testArrOne);
assertEquals(false, newDNASequence.isValidLetter('P'));
}
@Test
public void testConstructor(){
String msg = "The constructor should call the super and initialize seqarr to the input if all compnents are valid.";
DNASequence newDNASequence = new DNASequence(testArrOne);
Sequence newSequence = new Sequence(testArrOne);
assertArrayEquals(msg, testArrOne, newDNASequence.getSeq());
assertArrayEquals(msg, testArrOne, newSequence.getSeq());
}
}
编辑:我的失败清单
DNA序列测试
hw1.DNASequenceTest
testValidLetterTwo(hw1.DNASequenceTest)
java.lang.IllegalArgumentException: class edu.iastate.cs228.hw1.Sequence
的序列字母无效
at hw1.Sequence.<init>(Sequence.java:35)
at hw1.DNASequence.<init>(DNASequence.java:13)
at hw1.DNASequenceTest.testValidLetterTwo(DNASequenceTest.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access[=13=]0(ParentRunner.java:58)
at org.junit.runners.ParentRunner.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
testValidLetter(hw1.DNASequenceTest)
java.lang.IllegalArgumentException: class edu.iastate.cs228.hw1.Sequence
的序列字母无效
at hw1.Sequence.<init>(Sequence.java:35)
at hw1.DNASequence.<init>(DNASequence.java:13)
at hw1.DNASequenceTest.testValidLetter(DNASequenceTest.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access[=14=]0(ParentRunner.java:58)
at org.junit.runners.ParentRunner.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
测试构造函数(hw1.DNASequenceTest)
java.lang.IllegalArgumentException: class edu.iastate.cs228.hw1.Sequence
的序列字母无效
at hw1.Sequence.<init>(Sequence.java:35)
at hw1.DNASequence.<init>(DNASequence.java:13)
at hw1.DNASequenceTest.testConstructor(DNASequenceTest.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access[=15=]0(ParentRunner.java:58)
at org.junit.runners.ParentRunner.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
一个可能的原因是,您没有将正确的 类 添加到 运行 您的 junit 测试
@RunWith(springjunit4classrunner.class)
class DNASequenceTest {
问题是您总是使用 testArrOne
作为 DNASequence
构造函数的参数,它会检查每个元素的字母是否有效。但是 B
和 D
不是 有效的,所以测试总是失败并显示 IllegalArgumentException
.
您可以制作一个仅包含有效输入的测试数组以用作参数:
char[] testArrValid = { 'a', 'G', 'c', 'T' };
...
@Test
public void testValidLetter() {
String msg = "Method should return true if the character is a/A, c/C, g/G, or t/T";
DNASequence newDNASequence = new DNASequence(testArrValid); // <-- use here
assertEquals(msg, true, newDNASequence.isValidLetter('a'));
}
我有一个超级class和几个子class。出于某种原因,当我 运行 我的 JUnit 测试时,我尝试构建子 class 的所有方法都失败了,当我尝试调试它时,我收到了这条错误消息
Source not found: The JAR of this class file belongs to JUnit 4 which does not allow modifications to source attachments on its entries.
这是我的超级class
public class Sequence {
protected char[] seqarr;
public boolean isValidLetter(char let){
boolean isValid = false;
if (Character.isUpperCase(let) == true || Character.isLowerCase(let) == true){
isValid = true;
}
return isValid;
}
public Sequence(char[] sarr){
boolean check = true;
for (int i = 0; i<sarr.length; i++){
if (isValidLetter(sarr[i]) == false){
check = false;
break;
}
}
if (check == true){
seqarr = sarr;
}
if (check == false){
throw new IllegalArgumentException("Invalid sequence letter for class edu.iastate.cs228.hw1.Sequence"); //Need to figure out how to make this say whatever class it came from
}
}
public int seqLength(){
return seqarr.length;
}
public char[] getSeq(){
char[] seqCopy = seqarr;
return seqCopy;
}
public String toString(){
String stringSeq = "";
for(int i = 0; i < seqarr.length; i++){
stringSeq = stringSeq + seqarr[i];
}
return stringSeq;
}
public boolean equals(Object obj){
boolean check = false;
if (obj != null && (seqarr.toString().toLowerCase() == obj.toString().toLowerCase())){
check = true;
}
return check;
}
}
这是我的一个 classes
public class DNASequence extends Sequence {
@Override
public boolean isValidLetter(char let){
return "aAcCgGtT".indexOf(let) != -1;
}
public DNASequence(char[] dnaarr){
super(dnaarr);
}
}
这是 subclass 的测试用例 public class DNASequenceTest {
char[] testArrOne = {'a','B','c','D'};
@Test
public void testValidLetter() {
String msg = "Method should return true if the character is a/A, c/C, g/G, or t/T";
DNASequence newDNASequence = new DNASequence(testArrOne);
assertEquals(msg, true, newDNASequence.isValidLetter('a'));
}
@Test
public void testValidLetterTwo(){
DNASequence newDNASequence = new DNASequence(testArrOne);
assertEquals(false, newDNASequence.isValidLetter('P'));
}
@Test
public void testConstructor(){
String msg = "The constructor should call the super and initialize seqarr to the input if all compnents are valid.";
DNASequence newDNASequence = new DNASequence(testArrOne);
Sequence newSequence = new Sequence(testArrOne);
assertArrayEquals(msg, testArrOne, newDNASequence.getSeq());
assertArrayEquals(msg, testArrOne, newSequence.getSeq());
}
}
编辑:我的失败清单 DNA序列测试 hw1.DNASequenceTest testValidLetterTwo(hw1.DNASequenceTest) java.lang.IllegalArgumentException: class edu.iastate.cs228.hw1.Sequence
的序列字母无效at hw1.Sequence.<init>(Sequence.java:35)
at hw1.DNASequence.<init>(DNASequence.java:13)
at hw1.DNASequenceTest.testValidLetterTwo(DNASequenceTest.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access[=13=]0(ParentRunner.java:58)
at org.junit.runners.ParentRunner.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
testValidLetter(hw1.DNASequenceTest) java.lang.IllegalArgumentException: class edu.iastate.cs228.hw1.Sequence
的序列字母无效at hw1.Sequence.<init>(Sequence.java:35)
at hw1.DNASequence.<init>(DNASequence.java:13)
at hw1.DNASequenceTest.testValidLetter(DNASequenceTest.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access[=14=]0(ParentRunner.java:58)
at org.junit.runners.ParentRunner.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
测试构造函数(hw1.DNASequenceTest) java.lang.IllegalArgumentException: class edu.iastate.cs228.hw1.Sequence
的序列字母无效at hw1.Sequence.<init>(Sequence.java:35)
at hw1.DNASequence.<init>(DNASequence.java:13)
at hw1.DNASequenceTest.testConstructor(DNASequenceTest.java:31)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access[=15=]0(ParentRunner.java:58)
at org.junit.runners.ParentRunner.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
一个可能的原因是,您没有将正确的 类 添加到 运行 您的 junit 测试
@RunWith(springjunit4classrunner.class)
class DNASequenceTest {
问题是您总是使用 testArrOne
作为 DNASequence
构造函数的参数,它会检查每个元素的字母是否有效。但是 B
和 D
不是 有效的,所以测试总是失败并显示 IllegalArgumentException
.
您可以制作一个仅包含有效输入的测试数组以用作参数:
char[] testArrValid = { 'a', 'G', 'c', 'T' };
...
@Test
public void testValidLetter() {
String msg = "Method should return true if the character is a/A, c/C, g/G, or t/T";
DNASequence newDNASequence = new DNASequence(testArrValid); // <-- use here
assertEquals(msg, true, newDNASequence.isValidLetter('a'));
}