2015-08-27 16 views
5

Harici bir API'ye bir uyumluluk katmanı belirtmek için Google Mock kullanıyorum. Harici API'de, bazı eylemleri gerçekleştirmenin birçok yolu vardır, bu yüzden bir dizi beklentiden en az bir (veya tercihen tam olarak bir) beklentinin yerine getirildiğini belirtmek istiyorum. Sözde kodda, şunu yapmak istiyorum:Google alay - çok sayıda beklentiden en az biri

Expectation e1 = EXPECT_CALL(API, doFoo(...)); 
Expectation e2 = EXPECT_CALL(API, doFooAndBar(...)); 
EXPECT_ONE_OF(e1, e2); 
wrapper.foo(...); 

Bunu Google Mock kullanarak yapmak mümkün mü?

+0

' EXPECT_CALL kullanılarak? –

+0

@ BЈовић 'wrapper.foo()' 'doFoo()' olarak adlandırılan sürece çalışır, ancak 'wrapper.foo()' '' '' '' '' '' '' '' '' '' '' '' olarak adlandırılmasa bile geçmek için test etmek istiyorum Bunun yerine doFooAndBar() 'yi çağırıyor. – nemetroid

cevap

1

Bu iki şekilde yapmak mümkündür: özel yöntemleri uygulamakla ile

  1. - Aynı yöntemlerle, bir sınıf oluşturmak. Sonra kısmi sıralama çağrısı kullanarak bu nesne
  2. çağrı geçmek için Invoke() kullanma - farklı sıralarda farklı beklentileri oluşturmak özel yöntemi uygulamakla

    şey gibi ile here


açıklandığı gibi Bu:

( ) `Işler;.

(1) (, doFoo (_) API) kısmi sıralama çağrı kere

TEST_F(MyTest, CheckItInvokesAtLeastOne) { 
     MethodsTracker tracker; 
     Api obj(mock); 

     Sequence s1, s2, s3, s4; 

     EXPECT_CALL(mock, doFoo(_)).InSequence(s1).Times(AtLeast(1)); 
     EXPECT_CALL(mock, doFooAndBar(_,_)).InSequence(s1).Times(AtLeast(0)); 

     EXPECT_CALL(mock, doFoo(_)).InSequence(s2).Times(AtLeast(0)); 
     EXPECT_CALL(mock, doFooAndBar(_,_)).InSequence(s2).Times(AtLeast(1)); 

     EXPECT_CALL(mock, doFooAndBar(_,_)).InSequence(s3).Times(AtLeast(0)); 
     EXPECT_CALL(mock, doFoo(_)).InSequence(s3).Times(AtLeast(1)); 

     EXPECT_CALL(mock, doFooAndBar(_,_)).InSequence(s4).Times(AtLeast(1)); 
     EXPECT_CALL(mock, doFoo(_)).InSequence(s4).Times(AtLeast(0)); 

     obj.executeCall(); 
} 
+0

Kısmi sıralama çağrısı, hızlı bir şekilde elden çıkabilir gibi görünüyor, ancak özel yöntem yürütücüsünü kullanmak uygun bir çözüm gibi görünüyor. – nemetroid

İlgili konular