2017-02-02 6 views
-2

У меня есть класс супер и несколько подклассов. По какой-то причине, когда я бег моих JUnit тестов всех моих методов терпят неудачу, когда я пытаюсь построить подкласс и когда я пытаюсь отладить его я получаю сообщение об ошибке, которое говоритВсе методы тестирования, не выполняемые в конструкторах [Домашнее задание]

Источника не найдено: JAR этого файла класса принадлежит JUnit 4, который не позволяет изменять исходные вложения в своих записях.

Вот мой супер класс

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; 

} 





} 

Вот один из моих подклассов

public class DNASequence extends Sequence { 


@Override 
public boolean isValidLetter(char let){ 
    return "aAcCgGtT".indexOf(let) != -1; 
} 


public DNASequence(char[] dnaarr){ 
    super(dnaarr); 
} 
} 

А вот тест общественного класса, который подкласса 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()); 
} 
} 

Edit: Мой Список неудач DNASequenceTest hw1.DNASequenceTest testValidLetterTwo (hw1.DNASequenceTest) java.lang.IllegalArgumentException: Invalid буква последовательность для класса 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$1.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$3.run(ParentRunner.java:290) 

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 

at org.junit.runners.ParentRunner$2.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: Invalid письмо последовательность для класса 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$1.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$3.run(ParentRunner.java:290) 

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 

at org.junit.runners.ParentRunner$2.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) 

testConstructor (hw1.DNASequenceTest) java.lang.IllegalArgum entException: Invalid письмо последовательность для класса 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$1.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$3.run(ParentRunner.java:290) 

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 

at org.junit.runners.ParentRunner$2.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) 
+0

что ошибка в отсутствии? –

+0

Пожалуйста, покажите ** точную ** ошибку –

+0

*, когда я пытаюсь ее отладить, я получаю это сообщение об ошибке, которое говорит Источник не найден: JAR этого файла класса принадлежит JUnit 4, который не позволяет изменять исходный код вложения в его записи. * - Это красная селедка. Это произойдет, когда вы попытаетесь ввести код, в котором у вас нет исходного кода для –

ответ

0

Проблема в том, что вы всегда используете 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')); 
} 
+0

и как это работает без пояснения класса runner? –

+0

как вы знаете его ошибку? –

+1

@KamyarParastesh Eclipse позаботится об этом для меня, я могу просто использовать «run as junit test». И я знаю ошибку, потому что я запускал код. –

-1

Возможной причиной является то, вы не добавили соответствующие классы для запуска ваших JUnit тестов

@RunWith(springjunit4classrunner.class) 
class DNASequenceTest { 
+0

Спасибо за ответ!Он говорит, что runwith не может быть разрешен к типу, и я получаю всплывающее окно с надписью «Устаревшие методы на стеке» –

Смежные вопросы