2017-01-07 8 views
0

Как мы знаем, PowerMockito может подготовить для теста только один финал, статический или частный класс, как следующее:Как издеваются несколько статических классов по PowerMockito

@RunWith(PowerMockRunner.class) 
@PrepareForTest(SomeClassNumber1.class) 
public class SomeClassUnderTest{ 

    @Before 
    public void setUp() throws Exception { 


    } 

    @Test 
    public void testSomeMethod() throws Exception { 

    } 

} 

Но метод, который я буду тест использует более одного статические классы. Вещь, которую я хочу сделать, выглядит так:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(SomeClassNumber1.class, SomeClassNumber2.class) 
public class SomeClassUnderTest{ 

Но @PrepareForTest имеет только один аргумент.

Редактировать: Например, метод будет использовать одноэлементные, заводские или некоторые статические методы разных классов.

public class SomeClass { 

    private Session session; 
    private Object object; 

    public void someMethod(int userId) { 

     Session session = Session.getSession(userId); 
     Object object = Singleton.getInstance(); 
    } 
} 

Примечание: Эта проблема может быть решена с помощью единого принципа ответственности. например вместо того, чтобы использовать синглтон внутри метода, который собирается быть испытано, я могу извлечь его другим способом, как следующий, и издеваться над его:

public class SomeClass { 

    private Session session; 
    private Object object; 

    public void someMethod(int userId) { 

     session = getSession(userId); 
     object = getInstance(); 
    } 

    private getSession(userId) { 
     return Session.getSession(userId); 
    } 

    private Object getInstance(){ 
     return Singleton.getInstance(); 
    } 
} 

Но это тоже не кажется хорошим решением для меня. Лучше, если PowerMockito или другие инструменты тестирования имеют функцию, которая может одновременно издеваться над несколькими статическими классами.

ответ

1

Редактировать: Например, метод будет использовать однотонные, заводские или некоторые статические методы разных классов.

Вы не должны использовать статический доступ к членам класса и методам, в первую очередь, вы должны также избегать Java singelton шаблона, Есть другие возможности, чтобы убедиться, у вас есть только один экземпляр класса во время выполнения ,


Написав это позволяет ответить на ваш вопрос:

@PrepareForTest имеет только один аргумент.

Этот единственный аргумент может быть массивом:

@PrepareForTest({Class1.class,Class2.class}) 
+0

О, я забыл о фигурных скобках.)) Большое спасибо. – Vanguard