2

moqを使用して単体テストを作成しようとしています。

これがクラス構造です。

public interface IParameter<T> : IList<T>
{
}

public interface IParameters
{
    IParameter<string> Types;
}

public class MyClass
{
    public DataTable GetResult(IParameters parameters)
    {
        //do work here
        return dt;
    }
}

class TestMyClass
{
    [Test]
    public void TestGetResult()
    {
        var _mock = new Mock<IParameters>();
        _mock.SetUp(x => x.Types).Return(new [] {"1", "2"}); //Issue
        var m = new MyClass()
        var result = m.GetResult(_mock.Object)
        Assert.IsNotNull(result);
    }
}

IParametersのプロパティがIListタイプを返すように、_mock.SetUpを適切に呼び出す方法を学ぶ必要があります。

代わりに、私もこれを試しました...

var mock = new Mock<IParameters>();
var mockparams = new Mock<IParameter<string>>(); 
mockparams.SetReturnsDefault( ); //What should i call to add { "1", "2", "3" } 
mock.Setup(x => x.ReportTypes).Returns(mockparams.Object);

したがって、mockparamsでは、戻り値を設定するためにどの関数を呼び出す必要がありますか?

4

2 に答える 2

6

ところで:IParameters.Typesプロパティまたはメソッドですか?

IParameterIListの各メソッドを設定する必要はないので、パラメータのスタブを作成するだけで済みます。

class ParameterStub : List<String>, IParameter<String> { }

次に、モックIParametersは次のように簡単になります。

...
var mock = new Mock<IParameters>();
mock.Setup(x => x.Types).Returns(new ParameterStub() {"1","2"});
var m = new MyClass();
var result = m.GetResult(mock.Object);
...
于 2012-05-18T07:18:28.863 に答える
2

new [] {"1"、 "2"}の代わりに、IParameterをモックして、モックされたオブジェクトを返す必要があります。

于 2012-05-18T06:26:34.850 に答える