মকিতো যাচাইয়ের আদেশ / পদ্ধতি কলগুলির ক্রম


205

মকিতোতে methodOneআগে ডাকা হয়েছে কিনা তা যাচাই করার কোনও উপায় আছে methodTwo?

public class ServiceClassA {
    public void methodOne(){}
 }

public class ServiceClassB {
    public void methodTwo(){}
 }

public class TestClass {
    public void method(){
        ServiceClassA serviceA = new ServiceClassA();
        ServiceClassB serviceB = new ServiceClassB();
        serviceA.methodOne();
        serviceB.methodTwo();
    }
}

উত্তর:


305

InOrder আপনাকে এটি করতে সহায়তা করে।

ServiceClassA firstMock = mock(ServiceClassA.class);
ServiceClassB secondMock = mock(ServiceClassB.class);

Mockito.doNothing().when(firstMock).methodOne();   
Mockito.doNothing().when(secondMock).methodTwo();  

//create inOrder object passing any mocks that need to be verified in order
InOrder inOrder = inOrder(firstMock, secondMock);

//following will make sure that firstMock was called before secondMock
inOrder.verify(firstMock).methodOne();
inOrder.verify(secondMock).methodTwo();

5
এটি সঠিক, যদিও অন্য স্টাবের জন্য স্থানধারক ব্যতীত এখানে করণীয়ের কিছুই করার দরকার নেই। মকিটো নিঃশব্দে অকার্যকর পদ্ধতি কলগুলি ডিফল্টরূপে গ্রহণ করবে।
— জেফ বোম্যান

1
এটি তাদের গ্রহণ করে যখন অবজেক্টটির কোনও নির্ভরতা নেই যদি বস্তুর নির্ভরতা থাকে তবে সেখানে ব্যতিক্রম থাকবে =)
— কাইটোয়ার

14
inOrder.verifyNoMoreInteractions();অন্য কোনও কল করা হয়নি তা যাচাই করতে এই উদাহরণে সর্বশেষ যাচাইয়ের পরে বিবেচনা করুন ।
— ডিডব্বি

1
কেবল স্পষ্ট করে বলার জন্য: বিদ্রূপে কিছু (পরীক্ষিত) পদ্ধতি চাওয়ার পরে - যাচাইয়ের ঠিক আগে অর্ডার সংজ্ঞায়িত করা নিরাপদ।
— ব্যবহারকারী 3078523

ফলাফলগুলি কি একইরকম inOrder(firstMock, secondMock)এবং inOrder(secondMock, firstMock)? সম্ভবত আপনি এই সম্পর্কে একটি নোট করতে উত্তর আপডেট করতে পারেন।
— কেভিনারপে

94

নোট করুন যে আপনি কেবল দুটি বা ততোধিক মককেই নয়, একক উপহাসের জন্য বিভিন্ন পদ্ধতি আহ্বান করা হয়েছে তা যাচাই করতে আপনি ইনঅর্ডার ক্লাসটিও ব্যবহার করতে পারেন ।

ধরুন আমার দুটি ক্লাস রয়েছে Fooএবং Bar:

public class Foo {
  public void first() {}
  public void second() {}
}

public class Bar {
  public void firstThenSecond(Foo foo) {
    foo.first();
    foo.second();
  }
}

তারপরে আমি পরীক্ষার শ্রেণি যুক্ত করতে পারি যে Barএর firstThenSecond()পদ্ধতিটি আসলে কল করে first(), তারপরে second(), এবং না second()তখন first()। নিম্নলিখিত পরীক্ষার কোডটি দেখুন:

public class BarTest {
  @Test
  public void testFirstThenSecond() {
    Bar bar = new Bar();
    Foo mockFoo = Mockito.mock(Foo.class);
    bar.firstThenSecond(mockFoo);

    InOrder orderVerifier = Mockito.inOrder(mockFoo);
    // These lines will PASS
    orderVerifier.verify(mockFoo).first();
    orderVerifier.verify(mockFoo).second();

    // These lines will FAIL
    // orderVerifier.verify(mockFoo).second();
    // orderVerifier.verify(mockFoo).first();
  }
}

1
এটি সম্পূর্ণ নতুন উত্তর নয়, গৃহীত উত্তর সম্পর্কে একটি মন্তব্য হওয়া উচিত ছিল।
— এইচ

12
আমি আপনার মন্তব্যের সাথে একমত নই @ কোড কোড নমুনা সাহায্য করে, তাই একটি নতুন উত্তরটি বোঝায়।
— স্নেকসে

2
একই পদ্ধতিটি যাচাই করার জন্য কি কোনও উপায় বলা হয়েছে দুবার বলা হয়েছে, কিন্তু প্যারামিটারগুলির ক্রমটি যাচাই করা হয়েছে? যেমন প্রথমে find('foo'), তারপরেfind('bar')
— স্নেকস

1
ভালো দেখায় আমার উত্তর হতে পারে stackoverflow.com/questions/36573399/...
— Snekse

3
এটি আসলে গৃহীত উত্তরের চেয়ে একটি ভাল উদাহরণ কারণ এটি এর চেয়ে বেশি সাধারণ ব্যবহার দেখায়doNothing()
— আর্কিমিডিস ট্রাজানো

37

হ্যাঁ, এটি ডকুমেন্টেশনে বর্ণিত হয়েছে। আপনাকে ইনঅর্ডার ক্লাসটি ব্যবহার করতে হবে ।

উদাহরণ (ধরে নেওয়া হয়েছে দুটি টি ইতিমধ্যে তৈরি করেছেন):

InOrder inOrder = inOrder(serviceAMock, serviceBMock);

inOrder.verify(serviceAMock).methodOne();
inOrder.verify(serviceBMock).methodTwo();

1

বিডিডি দিয়ে এটি

@Test
public void testOrderWithBDD() {


    // Given
    ServiceClassA firstMock = mock(ServiceClassA.class);
    ServiceClassB secondMock = mock(ServiceClassB.class);

    //create inOrder object passing any mocks that need to be verified in order
    InOrder inOrder = inOrder(firstMock, secondMock);

    willDoNothing().given(firstMock).methodOne();
    willDoNothing().given(secondMock).methodTwo();

    // When
    firstMock.methodOne();
    secondMock.methodTwo();

    // Then
    then(firstMock).should(inOrder).methodOne();
    then(secondMock).should(inOrder).methodTwo();


}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.