J'essaie de me moquer d'une classe, appelée UserInputEntity
, qui contient une propriété appelée ColumnNames
: (elle contient d'autres propriétés, je viens de la simplifier pour la question)
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; }
}
}
J'ai un cours d'animateur:
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;
}
}
}
}
J'ai essayé le test suivant, où je me moque de l'entité, essaie d'obtenir la propriété ColumnNames
pour renvoyer une List<string>()
initialisée, mais cela ne fonctionne pas:
[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);
}
Les erreurs que je reçois indiquent qu'il existe des arguments non valides + L'argument 1 ne peut pas être converti de chaîne en
System.Func<System.Collection.Generic.List<string>>
Toute aide serait appréciée.
ColumnNames
est une propriété de type List<String>
donc vous devez passer un List<String>
dans l’appel Returns
en tant qu’argument (ou fonction qui retourne un List<String>
)
Mais avec cette ligne, vous essayez de retourner juste un string
input.SetupGet(x => x.ColumnNames).Returns(temp[0]);
qui cause l'exception.
Changez-le pour retourner la liste complète:
input.SetupGet(x => x.ColumnNames).Returns(temp);
Cependant, bien que mapper des propriétés en lecture seule signifie des propriétés avec la méthode getter uniquement, vous devez le déclarer comme virtuel. Sinon, une exception System.NotSupportedException sera levée car elle est uniquement prise en charge dans VB en tant que moq remplace en interne et crée un proxy lorsque on se moque de tout.