Moq, SetupGet, Bir mülkle alay etme


94

: Adlı bir UserInputEntityözelliği içeren bir sınıfla dalga geçmeye çalışıyorum ColumnNames: (başka özellikler içeriyor, sadece soru için basitleştirdim)

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; }
    }
}

Bir sunum sınıfım var:

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;
            }
        }
    }
}

Varlıkla alay ettiğim aşağıdaki testi denedim, ColumnNamesbaşlatılmış bir döndürmek için özellik almaya çalıştım, List<string>()ancak çalışmıyor:

    [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);
    }

Aldığım hatalar, bazı geçersiz bağımsız değişkenler olduğunu belirtir + Bağımsız Değişken 1, dizeden dönüştürülemez.

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

Herhangi bir yardım memnuniyetle karşılanacaktır.

Yanıtlar:


192

ColumnNamestürünün bir özelliğidir, List<String>bu nedenle kurarken List<String>, Returnsçağrıda argüman olarak bir (veya a döndüren bir func List<String>) iletmeniz gerekir.

Ama bu satırla sadece bir string

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

bu istisnaya neden oluyor.

Tüm listeyi döndürmek için değiştirin:

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

3
Görünüşe göre ara vermem gerekiyor. Yardımın için çok teşekkürler! (+1 n 7 dakika sonra kabul edecek)
Hans Rudel

18
SetupGet () aradığım şeydi. Teşekkürler!
imnk

Benimle aynı, sınıf özelliği için SetUpGet () kullandım ve çalışıyor.
rusça

4

Ancak, salt okunur özelliklerle alay etmek, getter yöntemine sahip özellikler anlamına gelirken, bunu sanal olarak bildirmeniz gerekir, aksi takdirde System.NotSupportedException atılır çünkü moq dahili olarak geçersiz kıldığından ve herhangi bir şeyle alay ettiğimizde proxy oluşturduğundan yalnızca VB'de desteklenir.


1
Peki, salt okunur bir özelliği bir arayüzde sanal olarak nasıl ilan edebiliriz?
2018
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.