Moq, SetupGet, Mocking a property
나는라는 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; }
}
}
발표자 클래스가 있습니다.
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>>
어떤 도움을 주시면 감사하겠습니다.
ColumnNames
은 유형의 속성 List<String>
이므로 설정할 때 호출 List<String>
에서 a 를 Returns
인수로 전달해야합니다 (또는 a를 반환하는 func List<String>
).
하지만이 줄을 사용하면 string
input.SetupGet(x => x.ColumnNames).Returns(temp[0]);
예외가 발생합니다.
전체 목록을 반환하도록 변경하십시오.
input.SetupGet(x => x.ColumnNames).Returns(temp);
But while mocking read-only properties means properties with getter method only you should declare it as virtual otherwise System.NotSupportedException will be thrown because it is only supported in VB as moq internally override and create proxy when we mock anything.
참고URL : https://stackoverflow.com/questions/12141799/moq-setupget-mocking-a-property
'developer tip' 카테고리의 다른 글
C #은 반환 형식 공분산을 지원합니까? (0) | 2020.10.21 |
---|---|
System.Drawing.Color 값 설정 (0) | 2020.10.21 |
SQL-varchar 데이터 유형을 datetime 데이터 유형으로 변환하여 값이 범위를 벗어났습니다. (0) | 2020.10.21 |
이온 빌드 Android | (0) | 2020.10.21 |
Base64 PNG 데이터를 HTML5 캔버스로 (0) | 2020.10.21 |