请帮助我。
我正在 C# 上使用 xUnit 和 mock(moq) 编写测试代码。
但是,通过接口的程序无法执行。
测试代码如下
// test code
public void test1(string id, EntityA fd)
{
var mockOrder = new Mock<InterfaceOrder>();
var service = new ItemService(mockOrder.Object);
var result = service.FunctionA(id, fd);
Assert.False(result);
}
// service
public class ItemService(InterfaceOrder order)
{
public bool FunctionA(string id, EntityA fd)
{
if (id == null) return false;
// ↓ GetList() is not executed and does not return the expected list
var list = order.GetList(id).ToList();
return list.Count() > 0 ? true : false;
}
}
// Interface Definition
public interface InterfaceOrder
{
IEnumerable<SalesEntity> GetList(string id);
}
// Interface Facts
public class EntityFrameOrder : InterfaceOrder
{
private readonly salesContext _context;
public EntityFrameOrder(IOptions<ConnectionString> connection)
{
var connectionString = connection.Value.Path;
DbContextOptionsBuilder<salesContext> opt = new();
opt.UseOracle(connectionString);
_context = new salesContext(opt.Options);
}
public IEnumerable<SalesEntity> GetList(string id)
{
var query = $@"
SELECT *
FROM SALES
WHERE CUSTOMERCD = :id
";
try
{
using DbManager dbManager = new();
~
return list;
}
}
}
ItemService的FunctionA的GetList()没有执行,没有返回预期的结果。
我正在使用模拟,但是我们还需要上下文的模拟实例吗?
如果您有任何建议给我,请告诉我。
谢谢你。
mockOrder.Object
创建的对象不知道在调用其成员时如何表现。您需要使用 mockOrder.Setup
来告诉它,例如
[Fact]
public void Test2()
{
var mockOrder = new Mock<InterfaceOrder>();
mockOrder.Setup(o => o.GetList("foo")).Returns([new()]);
var service = new ItemService(mockOrder.Object);
var result = service.FunctionA("foo", new EntityA());
Assert.True(result);
}