2013-10-21 15 views
7

Tôi có một lớp với một vài phương thức tĩnh. Tôi cần Mock các phương thức tĩnh này. Tôi biết PowerMock thực hiện điều này, nhưng tôi không thể tìm thấy bất kỳ hướng dẫn/tài liệu nào làm sáng tỏ về tích hợp "Spock + PowerMock". Tôi thích Spock đến Junit hơn, do đó là câu hỏi hóc búa. Có cách nào để có được 2 khuôn khổ để chơi bóng? Bất kỳ trợ giúp được nhiều đánh giá cao.Sample mã, thậm chí nhiều hơn như vậy.Sử dụng PowerMock với Spock

Cập nhật: Trạng thái hiện hành của pháp tiếp cận

Spock behaving weirdly

Trả lời

13

Tôi đã bị kẹt ở đây một lúc. Sau khi tìm kiếm giờ, tôi thấy repo github này: https://github.com/kriegaex/Spock_PowerMock.

Tôi đã thử thêm một PowerMockRule về cơ bản đã cho phép tôi sử dụng PowerMock cùng với Spock. Tôi phải thêm những phụ thuộc này. Phiên bản tại 1.5.4

<dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4-rule</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-classloading-xstream</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 

Lớp học của tôi trông như thế này:

import org.junit.Rule 
import org.mockito.Mockito 
import org.powermock.api.mockito.PowerMockito 
import org.powermock.core.classloader.annotations.PrepareForTest 
import org.powermock.modules.junit4.rule.PowerMockRule 
import spock.lang.Specification 

@PrepareForTest([SomeStaticClass.class]) 
public class FlightFormSpec extends Specification { 

    @Rule PowerMockRule powerMockRule = new PowerMockRule(); 

    def "When mocking static"() { 
     setup : 
      PowerMockito.mockStatic(SomeStaticClass.class) 

     when : 
      Mockito.when(SomeStaticClass.someStaticMethod()).thenReturn("Philippines!"); 

     then : 
      SomeStaticClass.someStaticMethod() == "Philippines!" 
    } 
} 

Dưới đây là một tài nguyên: https://github.com/jayway/powermock/wiki/powermockrule

+2

Hey, bạn tìm thấy repo của tôi và lưu tôi từ trả lời này một mình. :-) – kriegaex

+0

@kriegaex bạn đã viết nó. Tôi gần như đã từ bỏ Spock và PowerMock.Thanks để công khai repo của bạn! :) – juanpaolo

+1

@Avinash: Bạn nên chấp nhận câu trả lời của juanpaolo thay vì câu trả lời của riêng bạn rằng nó không hoạt động. Tôi nghĩ anh ấy xứng đáng. – kriegaex

1

Không có tích hợp đặc biệt; đặt cược tốt nhất của bạn là thử và sử dụng PowerMock "as-is". Từ những gì tôi nhớ, PowerMock đã từng gặp vấn đề với Groovy, và tôi không biết nếu điều này đã được giải quyết chưa. Và nếu tôi không nhầm, PowerMock viết lại mã byte của các lớp thử nghiệm, vì vậy câu hỏi tiếp theo là nếu nó hoạt động với Spock. Hãy cho chúng tôi biết bạn tìm thấy gì.

+0

thử nó ra, tôi nhận được một lỗi kỳ lạ tương tự như mô tả ở đây .... [link] (http://markmail.org/message/uehzu2wejtveldo6) .Absolutely không chắc chắn whats xảy ra ở đây: ( – Avinash

Các vấn đề liên quan