2015-08-06 2 views
0

Я использую JMock-2.6.0. У меня есть карта, содержащая имена методов и их ожидаемые возвращаемые значения. Я хочу вызвать метод на макет объекта, созданного с помощью JMock.Перенос из jMock1 пользовательских счетчиков вызова в jMock2

Раньше я был в состоянии это с помощью JMock 1, как это следует следующий синтаксис:

mockObj.stubs().method(mymap.getKey()).will(new ReturnStub(mymap.getValue())); 

Но я не уверен, если есть способ достичь этого, используя JMock-2.

Документация JMock-2 недостаточна.

+0

После прочтения вашего вопроса, он больше похож на вас спрашивает, как, в Джмоке 2, чтобы перебирать все поля или сеттеры в макете и присваивать им значение. Ваш заголовок заставляет его звучать так, как будто вы пытаетесь получить доступ к методам макета как статический импорт, поэтому вам не нужно было бы вводить mock.setData(), а не просто setData(), поскольку обычно называются совпадения. – ethesx

+0

У меня есть карта, содержащая некоторые конкретные имена методов для определенного класса. Теперь я хочу создать макет с указанным поведением для этих методов. Проблема заключается в том, что в Jmock 2 изделенный объект ведет себя как экземпляр этого класса, поэтому мы можем указать: «allow (mockObj) .getXXX(); will (returnValue (« sayYYY »)), но здесь я не знаете, как указать это 'getXXX()', потому что я получаю это имя метода String с карты, которую я не могу контролировать. – nickspol

+0

Я отозвал свой ответ. Помимо использования отражения, которое я могу опубликовать, я больше не вижу пути. Однако, если это DTO или VO, вы издеваетесь над этим, вы должны просто заполнить реальный объект. – ethesx

ответ

0

Я считаю, что this является документацией Вы искали:

Match объектов или методы

Хотя matchers обычно используется для указания допустимых значений параметров, они также могут быть использованы для определения приемлемых объекты или методы в ожидании, используя синтаксис API, аналогичный синтаксису API jMock 1. Для этого используйте матчи, где вы обычно ссылаетесь на объект-макет непосредственно в предложении count invocation. Затем цепочка содержит вместе для определения ожидаемого вызова.

Их пример включает в себя:

Чтобы призывания любого боба собственности добытчика на любом фиктивном объекте:

allowing (any(Object.class)).method("get.*").withNoArguments(); 

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

Испытание образца:

Интерфейс:

public interface ThingOneI { 

    public abstract String getData(); 

    public abstract void setData(String data); 

    public abstract String getRequest(); 

    public abstract void setRequest(String request); 

} 

Impl:

public class ThingOne implements ThingOneI { 

    private String data; 
    private String request; 

    public ThingOne() { 

    } 

@Override 
    public String getData() { 
     return data; 
    } 


@Override 
    public void setData(String data) { 
     this.data = data; 
    } 

@Override 
    public String getRequest() { 
     return request; 
    } 

@Override 
    public void setRequest(String request) { 
     this.request = request; 
    } 



} 

тест Junit:

import org.jmock.Expectations; 
import org.jmock.Mockery; 
import org.junit.Before; 
import org.junit.Test; 

public class ThingOneTest { 

    Mockery context = new Mockery(); 

    @Before 
    public void setUp() throws Exception { 
    } 

    @Test 
    public void test() { 
     ThingOneI thingOne = context.mock(ThingOneI.class); 
     Map<String, String> methMap = new HashMap<String, String>(); 
     methMap.put("getData", "5"); 

     context.checking(new Expectations() {{ 

      for (Map.Entry<String, String> entry : methMap.entrySet()) 
       allowing(any(ThingOneI.class)) 
        .method(entry.getKey()) 
        .with(any(String.class)); 
        will(returnValue(entry.getValue())); 
      } 

     }}); 

     System.out.println(thingOne.getData()); 

    } 
} 
+0

Это действительно указывало мне в правильном направлении. Спасибо! – nickspol

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