C#测试代码中接口定义程序的执行

问题描述 投票:0回答:1

请帮助我。

我正在 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()没有执行,没有返回预期的结果。

我正在使用模拟,但是我们还需要上下文的模拟实例吗?

如果您有任何建议给我,请告诉我。

谢谢你。

c# entity-framework moq xunit
1个回答
0
投票

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.