c# - FakeItEasy:根据表达式返回不同的对象
问题描述
我有一个我伪造的存储库,我需要根据表达式返回不同的值
A.CallTo(() => repository.FirstOrDefaultAsync<Group>(x => x.Id == busMessage.Id && x.GroupType == ObjectType.Office)).Returns(dbOffice);
A.CallTo(() => repository.FirstOrDefaultAsync<Group>(x => x.Id == busMessage.Id && x.GroupType == ObjectType.Country)).Returns(dbCountry);
我尝试了不同的方法,但没有运气,任何建议都值得赞赏
解决方案
尝试单独定义你的表达式。它对我有用。
using System;
using NUnit.Framework;
using FakeItEasy;
using System.Linq.Expressions;
namespace ClassLibraryTests
{
[TestFixture]
public class IRepositoryTests
{
private IRepository CreateSut(Expression<Func<Group, bool>> expression, object result)
{
IRepository sut = A.Fake<IRepository>();
A.CallTo(() => sut.FirstOrDefaultAsync<Group>(expression)).Returns(result);
return sut;
}
[Test]
public void FirstOrDefaultAsyncTests_Office()
{
// Arrange
BusMessage busMessage = new BusMessage();
Expression<Func<Group, bool>> expression = x => x.Id == busMessage.Id && x.GroupType == ObjectType.Office;
object dbOffice = new object();
IRepository repository = this.CreateSut(expression, dbOffice);
// Act
object obj = repository.FirstOrDefaultAsync<Group>(expression);
//Assert
Assert.AreEqual(obj, dbOffice);
}
[Test]
public void FirstOrDefaultAsyncTests_Country()
{
// Arrange
BusMessage busMessage = new BusMessage();
Expression<Func<Group, bool>> expression = x => x.Id == busMessage.Id && x.GroupType == ObjectType.Country;
object dbCountry = new object();
IRepository repository = this.CreateSut(expression, dbCountry);
// Act
object obj = repository.FirstOrDefaultAsync<Group>(expression);
//Assert
Assert.AreEqual(obj, dbCountry);
}
}
public interface IRepository
{
object FirstOrDefaultAsync<T>(Expression<Func<T, bool>> expression);
}
public class Group
{
public ObjectType GroupType { get; set; }
public int Id { get; set; }
}
public class BusMessage
{
public int Id { get; set; }
}
public enum ObjectType
{
Office,
Country
}
}
推荐阅读
- electron - 有没有办法在 HTML 中调用 Electron 的元素
- vb.net - Bitdefender 将我的控制台应用程序检测为 Gen:Variant.Ursu.56053
- python - ValueError:输出名称:logits/BiasAdd,已提供,但 Tensorflow 图不包含具有此名称的张量
- r - 将离散点转换为连续函数
- python - SeleniumLibrary 不接受 executable_path
- azure - Azure Data Studio Profiler 不显示 DBNames 和 LoginNames
- python - 跟进期限,寻找行动项目
- c# - 为什么给定代码的输出为 1,13,3?
- java - 键盘可见时调整 DialogFragment 的大小
- r - 使用 Diffeqr 包解决 R 中的 SDE:可以设置种子吗?