মক, সেটআপগেট, একটি সম্পত্তি উপহাস করা


94

আমি একটি শ্রেণীর নামে বিদ্রূপ করার চেষ্টা করছি UserInputEntity, যার নাম রয়েছে একটি সম্পত্তি রয়েছে ColumnNames: (এটিতে অন্যান্য বৈশিষ্ট্য রয়েছে, আমি এটি প্রশ্নের জন্য সহজ করে তুলেছি)

namespace CsvImporter.Entity
{
    public interface IUserInputEntity
    {
        List<String> ColumnNames { get; set; }
    }

    public class UserInputEntity : IUserInputEntity
    {
        public UserInputEntity(List<String> columnNameInputs)
        {
            ColumnNames = columnNameInputs;
        }

        public List<String> ColumnNames { get; set; }
    }
}

আমার উপস্থাপক শ্রেণি রয়েছে:

namespace CsvImporter.UserInterface
{
    public interface IMainPresenterHelper
    {
        //...
    }

    public class MainPresenterHelper:IMainPresenterHelper
    {
        //....
    }

    public class MainPresenter
    {
        UserInputEntity inputs;

        IFileDialog _dialog;
        IMainForm _view;
        IMainPresenterHelper _helper;

        public MainPresenter(IMainForm view, IFileDialog dialog, IMainPresenterHelper helper)
        {
            _view = view;
            _dialog = dialog;
            _helper = helper;
            view.ComposeCollectionOfControls += ComposeCollectionOfControls;
            view.SelectCsvFilePath += SelectCsvFilePath;
            view.SelectErrorLogFilePath += SelectErrorLogFilePath;
            view.DataVerification += DataVerification;
        }


        public bool testMethod(IUserInputEntity input)
        {
            if (inputs.ColumnNames[0] == "testing")
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}

আমি নিম্নলিখিত পরীক্ষার চেষ্টা করেছি, যেখানে আমি সত্তাকে উপহাস করি, ColumnNamesএকটি প্রাথমিকীকৃত ফেরত দেওয়ার জন্য সম্পত্তি পাওয়ার চেষ্টা List<string>()করি তবে এটি কার্যকর হয় না:

    [Test]
    public void TestMethod_ReturnsTrue()
    {
        Mock<IMainForm> view = new Mock<IMainForm>();
        Mock<IFileDialog> dialog = new Mock<IFileDialog>();
        Mock<IMainPresenterHelper> helper = new Mock<IMainPresenterHelper>();

        MainPresenter presenter = new MainPresenter(view.Object, dialog.Object, helper.Object);

        List<String> temp = new List<string>();
        temp.Add("testing");

        Mock<IUserInputEntity> input = new Mock<IUserInputEntity>();

    //Errors occur on the below line.
        input.SetupGet(x => x.ColumnNames).Returns(temp[0]);

        bool testing = presenter.testMethod(input.Object);
        Assert.AreEqual(testing, true);
    }

আমি যে ত্রুটিগুলি পেয়েছি তা উল্লেখ করে যে এখানে কিছু অবৈধ আর্গুমেন্ট রয়েছে + আর্গুমেন্ট 1 স্ট্রিং থেকে রূপান্তর করা যায় না

System.Func<System.Collection.Generic.List<string>>

কোন সাহায্য প্রশংসা করা হবে।

উত্তর:


192

ColumnNamesধরনের সম্পত্তি List<String>যাতে আপনি যখন সেট আপ করছেন আপনি যদি একটি পাস করতে হবে List<String>যে Returnsএকটি আর্গুমেন্ট হিসাবে কল (বা func যা আসতে List<String>)

তবে এই রেখার সাহায্যে আপনি কেবল একটি ফিরে আসার চেষ্টা করছেন string

input.SetupGet(x => x.ColumnNames).Returns(temp[0]);

যা ব্যতিক্রম ঘটায়।

পুরো তালিকাটিতে ফিরে আসার জন্য এটি পরিবর্তন করুন:

input.SetupGet(x => x.ColumnNames).Returns(temp);

4
মনে হচ্ছে আমার বিরতি দরকার। তোমার সাহায্যের জন্য অনেক ধন্যবাদ! (+1 এন 7 মিনিটে আপনার উত্তরগুলি স্বীকার করবে)
হ্যানস রুডেল

18
সেটআপগেট () আমি যা খুঁজছিলাম was ধন্যবাদ!
imnk

আমার মতো একই, শ্রেণীবদ্ধ সম্পত্তি জন্য সেটআপ গেট () ব্যবহার করা হয়েছে এবং এটি কাজ করে।
হুশিয়ান

4

তবে কেবল পঠনযোগ্য বৈশিষ্ট্যগুলির সাথে বিদ্রূপ করার অর্থ কেবল গিটার পদ্ধতি সহ বৈশিষ্ট্যগুলি কেবল আপনাকে এটিকে ভার্চুয়াল হিসাবে অন্যথায় ঘোষণা করা উচিত ot নটসপোর্টডএক্সেপশনটি নিক্ষেপ করা হবে কারণ এটি কেবলমাত্র ভিবিতে moq অভ্যন্তরীণভাবে ওভাররাইড হিসাবে সমর্থিত এবং যখন আমরা কোনও বিষয় উপহাস করি তখন প্রক্সি তৈরি করে।


4
তাহলে কীভাবে কোনও ইন্টারফেসে কেবল পঠনযোগ্য সম্পত্তিটিকে ভার্চুয়াল হিসাবে ঘোষণা করে?
erict
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.