gpt4 book ai didi

c# - Moq EF 6 DBSet,设置 FirstOrDefault 方法

转载 作者:太空宇宙 更新时间:2023-11-03 13:26:01 25 4
gpt4 key购买 nike

我想测试私有(private)方法。当我设置 FirstOrDefault 方法时,Moq 引发了异常。在我的算法中,我想检查一下,我的方法是否正确地创建了新对象。请参阅下面的代码。

//Arrange
var data = new List<TypeValue>();

var typeValueMockSet = new Mock<DbSet<TypeValue>>();

typeValueMockSet
.As<IList<TypeValue>>()
.Setup(m => m.GetEnumerator())
.Returns(data.GetEnumerator());

//throw the Error => Expression references a method that does not belong to the mocked object:
// m => m.FirstOrDefault<TypeValue>(It.IsAny<Expression`1>())
typeValueMockSet
.Setup(m => m.FirstOrDefault(It.IsAny<Expression<Func<TypeValue, bool>>>()))
.Returns(data.FirstOrDefault());

typeValueMockSet
.Setup(m => m.Add(It.IsAny<TypeValue>()))
.Returns((TypeValue vt) => vt)
.Callback((TypeValue vt) => data.Add(vt));

var mockContext = new Mock<EngineeringWorkEntities>();
mockContext.Setup(m => m.TypeValues).Returns(typeValueMockSet.Object);

int counter = 0;
mockContext
.Setup(m => m.SaveChanges())
.Returns(0)
.Callback(() => data
.ForEach(
(item) =>
{
item.Id = counter;
counter++;
}));

//Act
IMakro makroDateGenerate = new MakroDataGenerate(mockContext.Object);

var pObj = new PrivateObject(makroDateGenerate);

int r1 = (int)pObj.Invoke("GetTypeValueId", "0,2% k/k"); //2

最佳答案

你不能模拟 FirstOrDefault因为它是一种扩展方法。它不属于 List<T>或其他任何内容。

关于c# - Moq EF 6 DBSet,设置 FirstOrDefault 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22429468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com