c# - net - Moq, SetupGet, burlarse de una propiedad
moq setup (2)
Pero si burlarse de las propiedades de solo lectura significa que las propiedades con el método getter solo se debe declarar como virtual, de lo contrario se lanzará System.NotSupportedException porque solo se admite en VB ya que moq anula internamente y crea proxy cuando nos burlamos de algo.
UserInputEntity
una clase, llamada UserInputEntity
, que contiene una propiedad llamada ColumnNames
: (contiene otras propiedades, la simplifiqué para la pregunta)
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; }
}
}
Tengo una clase de presentador:
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
la siguiente prueba, donde me burlo de la entidad, intento obtener la propiedad ColumnNames
para devolver una List<string>()
inicializada List<string>()
pero no funciona:
[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);
}
Los errores que obtengo indican que hay algunos argumentos inválidos + El argumento 1 no se puede convertir de cadena a
System.Func<System.Collection.Generic.List<string>>
Cualquier ayuda sería apreciada.
ColumnNames
es una propiedad de tipo List<String>
por lo que cuando configure debe pasar una List<String>
en la llamada de Returns
como un argumento (o un func que devuelva una List<String>
)
Pero con esta línea intentas devolver solo una string
input.SetupGet(x => x.ColumnNames).Returns(temp[0]);
que está causando la excepción.
Cámbielo para devolver la lista completa:
input.SetupGet(x => x.ColumnNames).Returns(temp);