নন-মক অবজেক্টের একটি পদ্ধতি কীভাবে যাচাই করা যায়?


103

দেখে মনে হচ্ছে যে মকিতো কোনও মোক উপকরণের কোনও পদ্ধতি কল করা এবং মক অবজেক্টের সর্বদা এর মতো কিছু রয়েছে কিনা তা যাচাই করে doReturn().when(mock object)

তবে আমি কি কোনও মক অবজেক্ট তৈরি করে সংজ্ঞা দিতে পারি doReturn().when(mock object) এবং তারপরে অন্য কোনও অবজেক্টের একটি পদ্ধতি বলা হয় তা যাচাই করতে পারি ?

আমি যা করতে চাই তা এখানে: আমি একটি মক এনভায়রনমেন্ট সংজ্ঞায়িত করি এবং যাই ঘটুক না কেন প্রতিক্রিয়া ফিরিয়ে দিই। তবে আমি অন্য ওবিজেডের বিভিন্ন পদ্ধতি বিভিন্ন ক্ষেত্রে যাচাই করতে চাই।

কিভাবে যে কি?

public class BaseClass {
    private Environment mockEnvironment;
    @Test
    public void testcase () {
     setMockitoEnvironment(); 
     response = foo(mockEnvironment, argument1);
     verify(anotherObj).codePath1(...);
     response = foo(mockEnvironment, argument2);
     verify(anotherObj).codePath2(...);
   }
}

//this method successfully return a response with any input 
//because I do not care how response is eventually generated, 
//I only care whether code path reaches createResponse() via 
//code path 1 or code path 2.
private void setMockitoEnvironment() {
    mockEnvironment = mock(Environment.class);
    doReturn (response).when(mockEnvironment).createResponse(for any input);
}
private Response foo(...) {
    ... 
    return createResponse(...);
}

উত্তর:


121

আপনি এটির জন্য একটি মকিতো স্পাই ব্যবহার করতে পারেন । আপনি যদি anotherObjগুপ্তচর হিসাবে সেটআপ করেন আপনি সেই পদটিতে পদ্ধতি কলগুলি যাচাই করতে পারবেন। আপনার উদাহরণে আপনাকে নিশ্চিত করতে হবে যে কলটি fooকোনও সাধারণ প্রয়োগের পরিবর্তে গুপ্তচর ব্যবহার করে anotherObj। গুপ্তচর এইরকম কিছু সেটআপ করছে:

AnotherClass anotherObjSpy = Mockito.spy(new AnotherClass());
// do stuff -- e.g. anotherObjSpy.foo(...);
verify(anotherObjSpy).codePath1(...);

তার মানে আমি একাধিক জিনিস যাচাই করতে চাইলে আমাকে একাধিক উপহাসকৃত বস্তু তৈরি এবং ইনজেকশনের প্রয়োজন হতে পারে? এটি সুবিধাজনক নয়।
ব্যবহারকারী 389955

@ ব্যবহারকারী 389955 হ্যাঁ, আপনি গুপ্তচর হিসাবে যাচাই করতে চান এমন প্রতিটি বস্তু সেটআপ করতে হবে। আমি যতদূর জানি এর আশেপাশে কোনও উপায় নেই। মকিতোকে অবজেক্টগুলিতে একটি প্রক্সি যুক্ত করতে হবে এবং কাউকে অবশ্যই মকিতোকে বলতে হবে যে কোন বস্তু প্রক্সিটিতে রয়েছে।
কে এরল্যান্ডসন

10
"// স্টাফ করুন" বলার পরিবর্তে এটি যুক্ত করতে সহায়ক হতে পারে যে এটি "" আরেকটিবজএসপিএই "যে পদ্ধতি কলটি পরীক্ষা করে নেওয়া উচিত।
জোহরলে

ধন্যবাদ @ জেডওয়ার্ল, আপনাকে কলগুলিতে আরেকটি ওজেপিএসপি ব্যবহার করতে হবে, অন্যথায় পরীক্ষাগুলি কার্যকর হবে না।

2

@Spyটিক চিহ্ন সহ নন-মক অবজেক্টটি টিকিয়ে নিন এবং তারপরে পরীক্ষা করুন verify()। পরীক্ষা করে দেখুন এই

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