Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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#_Linq_Mocking_Moq - Fatal编程技术网

C# 模拟存储库的问题

C# 模拟存储库的问题,c#,linq,mocking,moq,C#,Linq,Mocking,Moq,我有一个包含以下方法的服务,该方法查询存储库,如下所示: public IEnumerable<Variable> ListVariables(int instanceId, int instanceVersionId, TypeGroup typeGroup) { return _variableRepository.Where(x => x.InstanceVersion.Instance.Id == instanceId && x.

我有一个包含以下方法的服务,该方法查询存储库,如下所示:

public IEnumerable<Variable> ListVariables(int instanceId, int instanceVersionId, TypeGroup typeGroup)
{
    return
        _variableRepository.Where(x => x.InstanceVersion.Instance.Id == instanceId && x.InstanceVersion.Version == instanceVersionId && x.VariableType.VariableTypeGroup.Id == Convert.ToInt32(typeGroup));
}   
[Test]
        public void ListVariables_Returns_Variables_From_Repository()
        {
            IEnumerable<Variable> reposVariables = new List<Variable>
                                                    {
                                                        new Variable {InstanceVersion = new InstanceVersion(), VariableType = new VariableType(), Value = "test value1"},
                                                        new Variable {InstanceVersion = new InstanceVersion(), VariableType = new VariableType(), Value = "test value2"},
                                                        new Variable {InstanceVersion = new InstanceVersion(), VariableType = new VariableType(), Value = "test value3"},
                                                        new Variable {InstanceVersion = new InstanceVersion(), VariableType = new VariableType(), Value = "test value4"}
                                                    };

            var mockVariableRepository = new Mock<IVariableRepository>();
            mockVariableRepository.Setup(y => y.Where(x => x.InstanceVersion.Instance.Id == 1 && x.InstanceVersion.Version == 1 && x.VariableType.VariableTypeGroup.Id == 1)).Returns(reposVariables).Verifiable();

            var service = CreateSpiralService(variableRepository: mockVariableRepository.Object);

            var result = service.ListVariables(1,1,TypeGroup.Information).ToList<Variable>();

            mockVariableRepository.Verify(y => y.Where(x => x.InstanceVersion.Instance.Id == 1 && x.InstanceVersion.Version == 1 && x.VariableType.VariableTypeGroup.Id == 1), Times.Once()); ;
            Assert.AreEqual(reposVariables, result);
        }
public IEnumerable ListVariables(int-instanceId、int-instanceVersionId、TypeGroup-TypeGroup)
{
返回
_variableRepository.Where(x=>x.InstanceVersion.Instance.Id==instanceId&&x.InstanceVersion.Version==instanceVersionId&&x.VariableType.VariableTypeGroup.Id==Convert.ToInt32(typeGroup));
}   
我试图编写一个单元测试来模拟此调用,如下所示:

public IEnumerable<Variable> ListVariables(int instanceId, int instanceVersionId, TypeGroup typeGroup)
{
    return
        _variableRepository.Where(x => x.InstanceVersion.Instance.Id == instanceId && x.InstanceVersion.Version == instanceVersionId && x.VariableType.VariableTypeGroup.Id == Convert.ToInt32(typeGroup));
}   
[Test]
        public void ListVariables_Returns_Variables_From_Repository()
        {
            IEnumerable<Variable> reposVariables = new List<Variable>
                                                    {
                                                        new Variable {InstanceVersion = new InstanceVersion(), VariableType = new VariableType(), Value = "test value1"},
                                                        new Variable {InstanceVersion = new InstanceVersion(), VariableType = new VariableType(), Value = "test value2"},
                                                        new Variable {InstanceVersion = new InstanceVersion(), VariableType = new VariableType(), Value = "test value3"},
                                                        new Variable {InstanceVersion = new InstanceVersion(), VariableType = new VariableType(), Value = "test value4"}
                                                    };

            var mockVariableRepository = new Mock<IVariableRepository>();
            mockVariableRepository.Setup(y => y.Where(x => x.InstanceVersion.Instance.Id == 1 && x.InstanceVersion.Version == 1 && x.VariableType.VariableTypeGroup.Id == 1)).Returns(reposVariables).Verifiable();

            var service = CreateSpiralService(variableRepository: mockVariableRepository.Object);

            var result = service.ListVariables(1,1,TypeGroup.Information).ToList<Variable>();

            mockVariableRepository.Verify(y => y.Where(x => x.InstanceVersion.Instance.Id == 1 && x.InstanceVersion.Version == 1 && x.VariableType.VariableTypeGroup.Id == 1), Times.Once()); ;
            Assert.AreEqual(reposVariables, result);
        }
[测试]
public void list Variables_从_存储库()返回_Variables_
{
IEnumerable reposVariables=新列表
{
新变量{InstanceVersion=new InstanceVersion(),VariableType=new VariableType(),Value=“test value1”},
新变量{InstanceVersion=new InstanceVersion(),VariableType=new VariableType(),Value=“test value2”},
新变量{InstanceVersion=new InstanceVersion(),VariableType=new VariableType(),Value=“test value3”},
新变量{InstanceVersion=new InstanceVersion(),VariableType=new VariableType(),Value=“test value4”}
};
var mockVariableRepository=new Mock();
mockVariableRepository.Setup(y=>y.Where(x=>x.InstanceVersion.Instance.Id==1&&x.InstanceVersion.Version==1&&x.VariableType.VariableTypeGroup.Id==1))。返回(reposVariables).可验证();
var service=CreateSpiralService(variableRepository:mockVariableRepository.Object);
var result=service.ListVariables(1,1,TypeGroup.Information).ToList();
mockVariableRepository.Verify(y=>y.Where(x=>x.InstanceVersion.Instance.Id==1&&x.InstanceVersion.Version==1&&x.VariableType.VariableTypeGroup.Id==1),Times.Once();
Assert.AreEqual(reposVariables,result);
}
但是当我运行它时,我得到以下错误:

Moq.MockException : 
Expected invocation on the mock once, but was 0 times: y => y.Where(x => (x.InstanceVersion.Instance.Id == 1 && x.InstanceVersion.Version == 1) && x.VariableType.VariableTypeGroup.Id == 1)

Configured setups:
y => y.Where(x => (x.InstanceVersion.Instance.Id == 1 && x.InstanceVersion.Version == 1) && x.VariableType.VariableTypeGroup.Id == 1), Times.Never

Performed invocations:
IReadOnlyNoIdRepository`1.Where(x => (((x.InstanceVersion.Instance.Id == value(Core.Services.Spiral.SpiralService+<>c__DisplayClass8).instanceId) AndAlso (x.InstanceVersion.Version == value(Core.Services.Spiral.SpiralService+<>c__DisplayClass8).instanceVersionId)) AndAlso (x.VariableType.VariableTypeGroup.Id == ToInt32(Convert(value(Core.Services.Spiral.SpiralService+<>c__DisplayClass8).typeGroup)))))
Moq.MockException:
预期对模拟调用一次,但为0次:y=>y.Where(x=>(x.InstanceVersion.Instance.Id==1&&x.InstanceVersion.Version==1)&&x.VariableType.VariableTypeGroup.Id==1)
配置的设置:
y=>y.Where(x=>(x.InstanceVersion.Instance.Id==1&&x.InstanceVersion.Version==1)&&x.VariableType.VariableTypeGroup.Id==1),次。从不
执行的调用:
IReadOnlyNoIdRepository`1.其中(x=>((x.InstanceVersion.Instance.Id==value(Core.Services.Spiral.Spiral服务+c_显示类8.instanceId)和(x.InstanceVersion.Version==value(Core.Services.Spiral.SpiralService+c_显示类8.instanceVersionId))以及(x.VariableType.VariableTypeGroup.Id==ToInt32(转换(value)(值(Core.Services.Spiral.SpiralService+c__DisplayClass8).类型组(()()))
我在测试夹具中作为存储库设置的一部分传入的表达式似乎与服务本身中定义的表达式不匹配。随后,末尾的断言不成立,因为它“需要一个包含4项的列表,但实际返回一个包含0项的列表”


有人知道可能出现什么问题吗?

您使用的表达式与您设置的表达式不匹配

您已设置:

y => y.Where(x => (x.InstanceVersion.Instance.Id == 1 && x.InstanceVersion.Version == 1) && x.VariableType.VariableTypeGroup.Id == 1)
鉴于,您需要这样做:

m => m.ListVariables(
  It.Is<int>(i ==> i == 1), 
  It.Is<int>(i ==> i == 1), 
  It.Is<TypeGroup>(t => t == TypeGroup.Information))

它将对照预期输入检查输入。

您使用的表达式与您设置的表达式不匹配

您已设置:

y => y.Where(x => (x.InstanceVersion.Instance.Id == 1 && x.InstanceVersion.Version == 1) && x.VariableType.VariableTypeGroup.Id == 1)
鉴于,您需要这样做:

m => m.ListVariables(
  It.Is<int>(i ==> i == 1), 
  It.Is<int>(i ==> i == 1), 
  It.Is<TypeGroup>(t => t == TypeGroup.Information))

它将对照预期输入检查输入。

与同事进一步讨论后,这似乎是NHibernate本身的问题。它与两者不匹配(相同)Where语句中的条件。

与同事进一步讨论后,这似乎是NHibernate本身的问题。两者不匹配(相同)Where语句中的条件。

您好,我已经更新了问题的第一行,因为我认为它可能有点混乱。我的意图是模拟存储库,而不是服务,这正是您在回答中所做的。您好,我已经更新了问题的第一行,因为我认为它可能有点混乱。我的意图是是模拟存储库,而不是服务,这是您在回答中所做的。