2009-11-25 61 views
8

Tôi không thể chạy Powermock thông qua maven. Tôi là PowerMock Mockito và PowerMockRunner để lái thử một bài kiểm tra jUnit.Chạy Junit & PowerMock với Mockito thông qua PowerMockRunner từ maven

Dưới đây là các bài kiểm tra:

@RunWith(PowerMockRunner.class) 
@PrepareForTest({ UserLocalServiceUtil.class, ExpandoBridge.class }) 
public class AlertNotificationsTest { 
//... 

Tôi đã không được cấu hình anyting đặc biệt để chạy thử nghiệm. Tài liệu tham khảo pom của tôi bao gồm các thông tin sau:

  • org.mockito | mockito-all | 1.8.0
  • junit | junit | 4.6.0
  • org.powermock.modules | powermock-module-junit4 | 1.3.1
  • org.powermock.api | powermock-api-mockito | 1.3.1

khi tôi chạy mvn -Dtest=AlertNotificationsTest test mvn cho biết không có thử nghiệm nào để chạy. Nhưng nếu tôi chạy cùng một lớp thử nghiệm từ nhật thực, mọi thứ đều chạy ok.

Tôi có làm gì sai không?


Dưới đây là pom.xml của tôi dưới đây (các bộ phận liên quan)

<dependency> 
     <groupId>org.testng</groupId> 
     <artifactId>testng</artifactId> 
     <version>5.9</version> 
     <classifier>jdk15</classifier> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.6</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.mockito</groupId> 
     <artifactId>mockito-all</artifactId> 
     <version>1.8.0</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.powermock.modules</groupId> 
     <artifactId>powermock-module-junit4</artifactId> 
     <version>1.3.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.powermock.api</groupId> 
     <artifactId>powermock-api-mockito</artifactId> 
     <version>1.3.1</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

Dưới đây là kết quả từ maven

mvn -Dtest = AlertNotificationsTest kiểm tra

... 
[INFO] Surefire report directory: C:\Devel\Java\EP_PORTAL\information-provider\target\surefi 

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 
Running TestSuite 
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.313 sec 

Results : 

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0 

[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] No tests were executed! (Set -DfailIfNoTests=false to ignore this error.) 
[INFO] ------------------------------------------------------------------------ 

Lưu ý: Tôi có thể chạy các thử nghiệm khác, tôi không thể chạy thử nghiệm này. Nếu tôi thực hiện lớp học AlertNotificationsTest mở rộng junit.framework.TestCase lớp học được chọn bởi maven, nhưng có vẻ như nó không được điều khiển bởi PowerMockRunner.

Dưới đây là đầu ra của rằng:


Running TestSuite 
[ERROR]: No test suite found. Nothing to run 
Tests run: 4, Failures: 2, Errors: 0, Skipped: 0, Time elapsed: 1.053 sec <<< FAILURE! 

Results : 

Failed tests: 
    testSingleEventNotification(pt.estradasportugal.traffic.services.events.AlertNotificationsTest) 
    testTwoEventNotification(pt.estradasportugal.traffic.services.events.AlertNotificationsTest) 

Tests run: 4, Failures: 2, Errors: 0, Skipped: 0 

Một lần nữa, những thử nghiệm này chỉ chạy tốt với Eclipse.


Cập nhật Tôi tìm thấy một vấn đề có thể & workaround. Tôi có các bài kiểm tra với TestNG và JUnit. Nếu tôi loại bỏ TestNG khỏi pom của tôi và di chuyển tất cả các thử nghiệm của tôi sang JUnit, tôi có thể chạy thử nghiệm PowerMock của mình với mvn test. Vì vậy, có vẻ như có vấn đề với maven và combo junit/testng.

Tôi muốn có thể chạy cả hai, nhưng nếu tôi không tìm được cách tôi sẽ đi và trả lời câu hỏi của riêng tôi. Thanks guys & gals

+0

là bài kiểm tra (không mở rộng 'junit.framework.TestCase') được kích hoạt khi bạn chạy 'mvn test'? –

+0

Không, nó không được kích hoạt. –

+0

Sau đó, thậm chí không mong đợi nó được khi sử dụng '-Dtest'. Bạn có một vấn đề khác (và có vẻ như bạn đã tìm thấy nguồn). –

Trả lời

-1

Đã xảy ra sự cố khi trộn cả TestNG & kiểm tra JUnit. Di chuyển tất cả các bài kiểm tra để Junit giải quyết vấn đề của tôi. Xin cảm ơn các bạn.

1

Powermock setup trông Ok với tôi, và các lọ có vẻ tốt đẹp (giả sử phụ thuộc bắc cầu maven lấy lọ powermock khác - chúng tôi có khoảng 6-7 sau khi quyết tâm ivy của chúng tôi được họ)

Eclipse có thể sử dụng thư viện JUnit "nội bộ" riêng của nó, do đó các hành vi khác nhau?

Kiểm tra có được chú thích bằng org.junit không.

+0

Có, các bài kiểm tra được chú thích với @ org.junit.Test –

2

Tôi không thể tái tạo sự cố của bạn. Với các nội dung sau đây trong pom.xml của tôi:

<repositories> 
    <repository> 
     <id>powermock-repo</id> 
     <url>http://powermock.googlecode.com/svn/repo/</url> 
    </repository> 
    </repositories> 
    <properties> 
    <powermock.version>1.3.1</powermock.version> 
    </properties> 
    <dependencies> 
    <dependency> 
     <groupId>org.powermock.modules</groupId> 
     <artifactId>powermock-module-junit4</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.powermock.api</groupId> 
     <artifactId>powermock-api-mockito</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.6</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.mockito</groupId> 
     <artifactId>mockito-all</artifactId> 
     <version>1.8.0</version> 
    </dependency> 
    </dependencies> 

Và các lớp kiểm tra sau (bỏ qua nhập khẩu):

@RunWith(PowerMockRunner.class) 
@PrepareForTest({ App.class }) 
public class AppTest { 
    @Test 
    public void testApp() { 
     assertTrue(true); 
    } 
} 

Chạy mvn test -Dtest=AppTest chỉ hoạt động tốt và đưa cho tôi kết quả như sau:

 
... 
------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 
Running com.mycompany.app.AppTest 
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.135 sec 

Results : 

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 3 seconds 
[INFO] Finished at: Wed Nov 25 17:34:32 CET 2009 
[INFO] Final Memory: 9M/79M 
[INFO] ------------------------------------------------------------------------ 

Vì vậy, câu hỏi đặt ra là: bạn có phương pháp được chú thích bằng @Test trong AlertNotificationsTest không?

+0

Có, tôi có rất nhiều bài kiểm tra được chú thích với @ org.junit.Test. –

+0

Sau đó, hãy đăng 'pom.xml' của bạn. Như tôi đã nói, tôi không thể tái tạo hành vi mà bạn mô tả. Và BTW, bạn thấy gì khi chạy 'mvn test'? –

+0

Đã đăng những gì bạn yêu cầu –

0

Nếu bạn nhìn vào nguồn của plugin Surefire, nó thực hiện một số nội dung lén lút. Nếu nó tìm thấy bất kỳ gói TestNG nào trong Trình nạp lớp, nó sẽ chọn chạy TestNG TestRunner. Tôi chưa thấy bất kỳ ví dụ nào của cả hai bài kiểm tra JUNit và TestNG cũng chạy song song.

+0

Điều này có thể sử dụng hai lần thực hiện. –

2

Tôi cũng gặp vấn đề này, nhưng không phải vấn đề về PowerMock. Lớp My Test được đặt tên là XStaticTests.java.

Khi tôi chạy "mvn kiểm tra sạch", bài kiểm tra này sẽ không chạy, nó chỉ chạy khi tôi đã chỉ định kiểm tra việc sử dụng "-Dtest = ..."

Các tài liệu chắc chắn hơn nói rằng theo mặc định chỉ những mô hình được tìm kiếm: "/Test*.java" - bao gồm tất cả các thư mục con của nó và tất cả tên tệp java bắt đầu bằng "Kiểm tra". "/Test.java" - bao gồm tất cả các thư mục con của nó và tất cả tên tệp java kết thúc bằng "Kiểm tra". " */* TestCase.java" - bao gồm tất cả các thư mục con của nó và tất cả tên tệp java kết thúc bằng "TestCase".

Vì vậy, thay đổi tên lớp thành một kết thúc bằng một trong số này, sẽ chạy khi "kiểm tra mvn" được gọi, nếu không plugin plugin chắc chắn cần được cấu hình với tên lớp cụ thể.

12

Tôi vừa gặp lỗi này và đã làm việc thông qua giải pháp. Tệp pom.xml của tôi có sự phụ thuộc sau:

<dependency> 
    <groupId>org.powermock</groupId> 
    <artifactId>powermock-mockito-release-full</artifactId> 
    <version>1.5</version> 
    <classifier>full</classifier> 
    <scope>test</scope> 
</dependency> 

Vấn đề xuất phát từ mã của tôi sử dụng JUnit và phụ thuộc ở trên có sự phụ thuộc bên ngoài vào TestNG. Điều này đã ngừng chạy thử nghiệm của tôi. Tại sao tôi không biết - bạn sẽ có mặc dù một khuôn khổ thử nghiệm sẽ được thử nghiệm tốt hơn một chút !!!

Dù sao các giải pháp là để phá vỡ sự phụ thuộc 'đầy đủ' để chỉ những yêu cầu:

<dependency> 
    <groupId>org.powermock</groupId> 
    <artifactId>powermock-api-mockito</artifactId> 
    <version>1.5</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>org.powermock</groupId> 
    <artifactId>powermock-core</artifactId> 
    <version>1.5</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>org.powermock</groupId> 
    <artifactId>powermock-module-junit4</artifactId> 
    <version>1.5</version> 
    <scope>test</scope> 
</dependency> 

Đó giải quyết nó. BTW Tôi đã sử dụng mvn dependency:tree để hiểu các phụ thuộc liên quan.

+0

Giải pháp này làm việc cho tôi. Tôi đã sử dụng phiên bản Powermock 1.6.4 với Mockito 1.9.5. –

0

Tôi có cùng một vấn đề và phải mất một thời gian để tìm ra. Thiết lập của tôi đã được kéo vào một phiên bản cũ hơn của jboss.javassist, điều kỳ quặc đã ngăn cản PowerMockRunner hoạt động.

Điều đáng lưu ý là tôi cũng có môi trường JUnit/TestNG hỗn hợp. Trước đây tôi đã thử giải pháp thêm nhiều nhà cung cấp dịch vụ chắc chắn và điều đó cũng không hoạt động (sử dụng chắc chắn 2.14.1). Sau khi nâng cấp lên chắc chắn 2.17, cả hai bài kiểm tra JUnit và TestNG của tôi đều bắt đầu chạy mà không cần khai báo bất kỳ nhà cung cấp chắc chắn nào.

Dưới đây là phần Plugin của tôi ...

 <plugin> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.17</version> 
      <configuration> 
       <groups>spring, unit, integration</groups> 
       <systemPropertyVariables> 
        <java.awt.headless>true</java.awt.headless> 
        <org.apache.activemq.default.directory.prefix>target/test/</org.apache.activemq.default.directory.prefix> 
        <log4j.configuration>file:${project.basedir}/src/test/resources/log4j.properties</log4j.configuration> 
       </systemPropertyVariables> 
       <argLine>${surefire.args}</argLine> 
      </configuration> 
     </plugin> 

... và DEPS thử nghiệm có liên quan ...

<dependency> 
     <groupId>org.mockito</groupId> 
     <artifactId>mockito-all</artifactId> 
     <version>1.9.5</version> 
     <scope>test</scope> 
    </dependency> 
    <!-- 
    PowerMock versions are compatible with specific Mockito versions. 
    https://code.google.com/p/powermock/wiki/MockitoUsage13 
    --> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4</artifactId> 
     <version>1.5.4</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-api-mockito</artifactId> 
     <version>1.5.4</version> 
     <scope>test</scope> 
    </dependency> 
    <!-- without this PowerMock tests don't run in maven --> 
    <dependency> 
     <groupId>jboss</groupId> 
     <artifactId>javassist</artifactId> 
     <version>3.8.0.GA</version> 
     <scope>test</scope> 
    </dependency> 
Các vấn đề liên quan