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

  • Canal de arkyoru

    Canal de ark

    18 Ocak 2007
  • Besnik Ibrahimi

    Besnik Ibrah

    27 Mart 2010
  • technodromeband's channel

    technodromeb

    28 NİSAN 2011