SORU
18 Kasım 2010, PERŞEMBE


Nasıl farklı bir şey dönmek için Mockito sahte bir nesne denir söyle, bir dahaki sefere?

Yani, ben oluşturma bir alay nesnesi olarak bir statik değişken sınıf düzeyi gibi yani... bir test istiyorum Foo.someMethod() dönmek belli bir değer, süre içinde yeni bir sınav istiyorum dönmek farklı bir değer. Yaşıyorum sorun dalga geçiyor bu doğru işe almak için yeniden inşa etmem gerekiyor gibi görünüyor. Bu alay yeniden önlemek, ve sadece her test aynı nesneleri kullanmak istiyorum.

class TestClass {

    private static Foo mockFoo;

    @BeforeClass
    public static void setUp() {
        mockFoo = mock(Foo.class);
    }

    @Test
    public void test1() {
        when(mockFoo.someMethod()).thenReturn(0);

        TestObject testObj = new TestObject(mockFoo);

        testObj.bar(); // calls mockFoo.someMethod(), receiving 0 as the value

    }

    @Test
    public void test2() {
        when(mockFoo.someMethod()).thenReturn(1);

        TestObject testObj = new TestObject(mockFoo);

        testObj.bar(); // calls mockFoo.someMethod(), STILL receiving 0 as the value, instead of expected 1.

    }

}

İkinci testte, hala testObj zaman değeri 0 olarak alıyorum.() bar denilen... bunu çözmek için en iyi yolu Nedir? Not Bu benim işime farklı bir alay Foo Her bir test, ancak, ben zinciri isteklerle kapalı mockFoo, anlam istiyorum yapmalısın zincirleme her test.

CEVAP
19 Mayıs 2011, PERŞEMBE


Ayrıca 7 ** (1.8.5 apı#10). Bu durumda, birden fazla kullanırsınızThenReturntablolar.

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import org.junit.Before;
import org.junit.Test;

public class TestClass {

private Foo mockFoo;

@Before
public void setup() {
    setupFoo();
}

@Test
public void testFoo() {
    TestObject testObj = new TestObject(mockFoo);

    assertEquals(0, testObj.bar());
    assertEquals(1, testObj.bar());
    assertEquals(-1, testObj.bar());
    assertEquals(-1, testObj.bar());

}

private void setupFoo() {
    mockFoo = mock(Foo.class);

    when(mockFoo.someMethod())
        .thenReturn(0)
        .thenReturn(1)
        .thenReturn(-1); //any subsequent call will return -1
}

}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DeAdPiXel6667

    DeAdPiXel666

    2 Ocak 2010
  • kylelandry

    kylelandry

    9 AĞUSTOS 2007
  • SDSARG3

    SDSARG3

    14 Mart 2009