c# - একটি পদ্ধতি বলা হয় কিনা তা নির্ধারণ করতে Moq ব্যবহার করে



.net unit-testing (2)

এটা আমার বোঝার যে আমি যদি যাচাই করতে পারি যে একটি পদ্ধতি কল ঘটবে যদি আমি উচ্চ স্তরের পদ্ধতি বলি, অর্থাৎ:

public abstract class SomeClass()
{    
    public void SomeMehod()
    {
        SomeOtherMethod();
    }

    internal abstract void SomeOtherMethod();
}

আমি পরীক্ষা করতে চাই যে যদি আমি SomeMethod() কল করি তবে আমি আশা করি SomeOtherMethod() কে বলা হবে।

আমি ঠিক এই ধরণের পরীক্ষা একটি ঠকানো কাঠামো পাওয়া যায়?


Answer #1

আপনি যে কোনও উপায়ে ম্যাকড করা একটি পদ্ধতি যাচাইয়ের মাধ্যমে ব্যবহার করতে পারেন তা দেখতে পারেন, উদাহরণস্বরূপ:

static void Main(string[] args)
{
        Mock<ITest> mock = new Mock<ITest>();

        ClassBeingTested testedClass = new ClassBeingTested();
        testedClass.WorkMethod(mock.Object);

        mock.Verify(m => m.MethodToCheckIfCalled());
}

class ClassBeingTested
{
    public void WorkMethod(ITest test)
    {
        //test.MethodToCheckIfCalled();
    }
}

public interface ITest
{
    void MethodToCheckIfCalled();
}

লাইনটি যদি মন্তব্য করা হয় তবে এটি যাচাই করা হবে যখন আপনি Verify কল করবেন তখন এটি একটি MockException নিক্ষেপ করবে। এটা অসম্পূর্ণ হলে এটি পাস হবে।


Answer #2

না, মক টেস্টিং আপনি কিছু testable নকশা নিদর্শন ব্যবহার করা হয় অনুমান, যা এক ইনজেকশন হয়। আপনার ক্ষেত্রে আপনি SomeClass.SomeMethod এবং SomeOtherMethod আবশ্যক অন্য সত্তা যা বাস্তবায়িত করা প্রয়োজন প্রয়োগ করা আবশ্যক।

আপনার Someclass কনস্ট্রাক্টারটি New(ISomeOtherClass) মত দেখতে হবে। তারপরে আপনি ISomeOtherClass উপহাস ISomeOtherClass এবং তার কিছু SomeOtherMethod প্রত্যাশা স্থাপন ISomeOtherClass এবং প্রত্যাশা যাচাই করবেন।





moq