Moq, SetupGet, издеваясь над свойством
Я пытаюсь издеваться над классом, называется 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; }
}
}
у меня есть класс presenter:
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>>
любая помощь будет оценили.
2 ответа:
ColumnNames
- свойство типаList<String>
поэтому, когда вы настраиваете, вам необходимо пройтиList<String>
наReturns
вызов в качестве аргумента (или функция, которая возвращает aList<String>
)но с этой строкой вы пытаетесь вернуть только
string
input.SetupGet(x => x.ColumnNames).Returns(temp[0]);
что вызывает исключение.
изменить его, чтобы вернуть весь список:
input.SetupGet(x => x.ColumnNames).Returns(temp);
но в то время как издевательство над свойствами только для чтения означает свойства только с методом getter, вы должны объявить его как виртуальную систему в противном случае.NotSupportedException в то время как будет брошен, потому что он поддерживается только в VB, поскольку moq внутренне переопределяет и создает прокси, когда мы издеваемся над чем-либо.