2012-08-27 9 views
45

ich eine Klasse zu verspotten ich versucht, UserInputEntity genannt, die eine Eigenschaft ColumnNames genannt enthält: (es andere Eigenschaften enthält, habe ich es nur für die Frage vereinfacht)Moq, SetupGet, eine Eigenschaft Mocking

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

ich einen Moderator Klasse:

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

ich den folgenden Test ausprobiert habe, wo ich an das Unternehmen zu verspotten, versuchen ColumnNames Eigenschaft zu bekommen initialisiert List<string>() zurückzukehren, aber es funktioniert nicht:

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

Die Fehler, die ich Zustand erhalten, dass es einige ungültige Argumente + Argument 1 kann nicht von String

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

Jede Hilfe würde geschätzt umgewandelt werden.

Antwort

93

ColumnNames ist eine Eigenschaft des Typs List<String> so, wenn Sie Ihnen ein List<String> im Returns Aufruf als Argument übergeben müssen einrichten (oder eine func, die ein List<String> zurück)

Aber mit dieser Linie, die Sie versuchen, Rückkehr nur ein string

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

, die die Ausnahme verursacht.

ändern es ganze Liste zurückzukehren:

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

sieht aus wie ich eine Pause brauchen. Vielen Dank für Ihre Hilfe! (+1 n akzeptiert ur ans in 7 mins) –

+8

SetupGet() war, was ich gesucht habe. Vielen Dank! – imnk