2011-11-03 3 views
0

빠른 셀렌 예제를 실행하려고하는데 문제가 있습니다. 이전에 JUnit 테스트 케이스를 작성했으며 제대로 작동하지만 여기에는 제 코드와 오류가 있습니다.셀레늄 junit.framework.AssertionFailedError : 테스트하지 못했습니다.

package alltests; 
import testsuites.SeleniumTestTutorial; 
import junit.framework.Test; 
import junit.framework.TestSuite; 

public class AllTests { 

public static Test suite() { 
    TestSuite suite = new TestSuite("Test for SeleniumTutorial"); 
    suite.addTestSuite(SeleniumTestTutorial.class); 
    return suite; 
    } 
} 

다음은 이전에 사용한 자습서입니다. 나는이 테스트를 작성하지 않았고 실패 할 가능성이 높습니다.

package testsuites; 
import junit.framework.TestCase; 
import org.junit.AfterClass; 
import org.junit.BeforeClass; 
import org.junit.Test; 
import com.thoughtworks.selenium.DefaultSelenium; 
import com.thoughtworks.selenium.Selenium; 


public class SeleniumTestTutorial extends TestCase{ 

private static Selenium browser; 

@BeforeClass 
public static void init() { 
    browser = new DefaultSelenium("localhost", 4444, "*firefox", 
      "http://new.music.yahoo.com/"); 
    browser.start(); 
} 

@Test 
public void isVideosHpLoaded() { 
    browser.open("http://new.music.yahoo.com/"); 
    browser.click("//*[@id=\"YMusic_HeaderNavItemMenu2\"]/a/span"); 
    browser.waitForPageToLoad("5000"); 
    System.out.println("checking title " + browser.getTitle()); 
    assertEquals("Music Videos on Yahoo! Music", browser.getTitle()); 
} 

@Test 
public void isTop100VideosModuleLoaded() { 
    Number numElements = browser 
      .getXpathCount("//*[@id=\"ymMvHpTopVideos\"]/div/div/h2/a"); 
    String modHeaderText = browser 
      .getText("//*[@id=\"ymMvHpTopVideos\"]/div/div/h2/a"); 
    assertEquals(1, numElements.intValue()); 
    assertEquals("Top 100 Videos", modHeaderText); 
} 

@Test 
public void isVideoStationsModuleLoaded() { 
    Number numElements = browser 
      .getXpathCount("//*[@id=\"ymMvHpVideoStationsContentContainer\"]/div/div[2]/h2/a"); 
    String modHeaderText = browser 
      .getText("//*[@id=\"ymMvHpVideoStationsContentContainer\"]/div/div[2]/h2/a"); 
    assertEquals(1, numElements.intValue()); 
    assertEquals("Video Stations", modHeaderText); 
} 

@Test 
public void countTotalVideoRecs() { 
    Number numElements = browser 
      .getXpathCount("//*[@id=\"ymusicRecommendHp\"]//ul[@class=\"ymusic_thumbnailList\"]/li"); 
    assertEquals(6, numElements.intValue()); 
} 

@AfterClass 
public static void cleanup() { 
    browser.stop(); 
} 
} 

여기에 오류가 있습니다. 저는이 포맷을 다른 JUnit 테스트에 사용했습니다. 그리고 나는 전혀 문제가 없었습니다. 또한 JUnit과 Selenium을 사용하기위한 업데이트 된 자습서를 찾을 수없는 것 같습니다. 누구든지 좋은 링크가 있다면 나는 반대하지 않을 것입니다. 미리 감사드립니다!

junit.framework.AssertionFailedError: No tests found in testsuites.SeleniumTestTutorial 
at junit.framework.Assert.fail(Assert.java:47) 
at junit.framework.TestSuite$1.runTest(TestSuite.java:97) 
at junit.framework.TestCase.runBare(TestCase.java:134) 
at junit.framework.TestResult$1.protect(TestResult.java:110) 
at junit.framework.TestResult.runProtected(TestResult.java:128) 
at junit.framework.TestResult.run(TestResult.java:113) 
at junit.framework.TestCase.run(TestCase.java:124) 
at junit.framework.TestSuite.runTest(TestSuite.java:243) 
at junit.framework.TestSuite.run(TestSuite.java:238) 
at junit.framework.TestSuite.runTest(TestSuite.java:243) 
at junit.framework.TestSuite.run(TestSuite.java:238) 
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) 
at  org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

답변

1

JUnit 3 Test Suite 및 JUnit 4 테스트 클래스를 혼합합니다. 당신은 JUnit 4에서는 테스트 스위트를 작성해야합니다 : 당신이 TestSuite (JUnit을 3)을 실행

import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
     SeleniumTestTutorial.class 
}) 
public class AllTests { 
} 

, 그것은 '테스트'로 시작하는 방법을 검색합니다. JUnit 4 스위트 (@RunWith(Suite.class) 포함)의 경우 @Test 주석이있는 메소드를 검색합니다.

+0

도움 주셔서 감사합니다. 그것은 지금 매력처럼 작동하고 있습니다. –

2

JUnit 3과 JUnit 4 스타일 테스트가 혼합되어 있기 때문에 생각합니다.

JUnit 3.x를 사용하고 있다면 TestCase를 확장하려고하지만 모든 테스트 메소드의 이름이 "testXYZ"(즉, test라는 단어로 시작해야 함)가 필요합니다. @Test 주석은 무시됩니다.

JUnit 4의 경우 TestCase를 확장하지 않고 주석을 사용합니다.

+0

그것은 일식에 대한 해킹이기 때문에 그렇게합니다. TestCase를 확장하지 않으면 suite.addTestSuite (SeleniumTestTutorial.class)에서 오류가 발생합니다. 그러나 당신이 옳을 수도 있습니다, 그럴 가능성이 가장 큽니다. –

+0

TestSuites를 직접 사용하지는 않지만 TestSuite는 JUnit 3 클래스이기도합니다. JUnit 4에는 'Suite'클래스가 있습니다. 그게 네가 원하는 것 일 수 있니? – DaveyDaveDave

+0

또는 TestCase를 확장하여 모든 메서드 이름 앞에 'test'를 붙입니다. – DaveyDaveDave