Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要使用最小起订量的帮助吗_C#_.net_Unit Testing_Moq - Fatal编程技术网

C# 需要使用最小起订量的帮助吗

C# 需要使用最小起订量的帮助吗,c#,.net,unit-testing,moq,C#,.net,Unit Testing,Moq,我在单元测试中很难模拟,所以我举了一个简单的例子来说明我的问题。我有以下几点 public class SomeClass : ISomeInterface { public int ID { get; set; } public string Desc { get; set; } public int Create(SomeClass t) { return 5; }

我在单元测试中很难模拟,所以我举了一个简单的例子来说明我的问题。我有以下几点

public class SomeClass : ISomeInterface
    {
        public int ID { get; set; }
        public string Desc { get; set; }

        public int Create(SomeClass t)
        {
            return 5;
        }

        public int Create2(string s)
        {
            return 7;
        }
    }

    public interface ISomeInterface
    {
        int Create(SomeClass t);
        int Create2(string s);
    }
现在我有两种方法来测试模拟接口

    private void TestCreate()
    {
        var mocker = new Mock<ISomeInterface>();
        mocker.Setup(x => x.Create(new SomeClass())).Returns(3);
        var result = mocker.Object.Create(new SomeClass());
    }

    private void TestCreate2()
    {
        var mocker = new Mock<ISomeInterface>();
        mocker.Setup(x => x.Create2("Test")).Returns(4);
        var result = mocker.Object.Create2("Test");
    }
private void TestCreate()
{
var mocker=new Mock();
Setup(x=>x.Create(newsomeclass()).Returns(3);
var result=mocker.Object.Create(new SomeClass());
}
私有void TestCreate2()
{
var mocker=new Mock();
mocker.Setup(x=>x.Create2(“Test”))。返回(4);
var result=mocker.Object.Create2(“测试”);
}
TestCreate2工作并返回模拟结果“4”
但是TestCreate返回“0”而不是“3”


我需要什么才能模拟接受自定义类作为参数而不是简单int和字符串的方法呢?

是的,这是因为安装程序TestCreate在获取安装程序调用期间传入的某个类的实例时返回3。但是,由于您以内联方式更新实例,因此在实际的Create调用期间传入的实例是不同的。下面的任一选项都将解决您的问题

private void TestCreate()
{
    var mocker = new Mock<ISomeInterface>();
    mocker.Setup(x => x.Create(It.IsAny<SomeClass>())).Returns(3);
    var result = mocker.Object.Create(new SomeClass());
}

private void TestCreate()
{
    var mocker = new Mock<ISomeInterface>();
    var someClass = new SomeClass();
    mocker.Setup(x => x.Create(someClass)).Returns(3);
    var result = mocker.Object.Create(someClass);
}
private void TestCreate()
{
var mocker=new Mock();
mocker.Setup(x=>x.Create(It.IsAny()).Returns(3);
var result=mocker.Object.Create(new SomeClass());
}
私有void TestCreate()
{
var mocker=new Mock();
var someClass=new someClass();
mocker.Setup(x=>x.Create(someClass)).Returns(3);
var result=mocker.Object.Create(someClass);
}