什么是使用braintree进行单元测试的最佳方法

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

我目前正在使用.NET SDK处理我的asp.net核心项目的付款。我想使用单元测试自动化测试,但事实证明这很困难。

库使用的所有类 - 特别是“订阅”以及更多 - 具有内部构造函数或期望其他内部实例。从json创建实例以将其传递给函数的选项已经完成。

也不可能构造一个自己的实例,因为类属性都是getter,只有带有setter的“* request”类但这些并没有多大帮助,因为应用程序不必处理它们。

Webhook测试类完全没用,因为它提供的实例是空的,只有id和status设置。我的应用程序需要来自订阅的更多数据,例如Transaction实例,Addons,Billing日期等等;所有这些都没有填充。

我有几个需要测试的类,而且必须手动完成这些操作只是简单而浪费了很多时间。我还缺少另一种方法吗?

为什么图书馆这样设计,在我看来保持图书馆如此封闭似乎不太实际。

.net braintree
1个回答
0
投票

对于那些仍在寻找的人,没有可能的方法直接对类本身进行单元测试而无需编辑库。从好的方面来看,并不是所有的希望都会消失,使用MOQ(https://github.com/Moq/moq4/wiki/Quickstart)可以让你模拟课程 - 以及更多 - 。我用它来模拟我有兴趣测试的类,作为一个例子,创建一个我完全控制的事务,我会:

模拟事务对象。

    public Mock<Result<Transaction>> SuccessTransaction_Mock { get; set; }

    public Result<Transaction> SuccessTransaction => SuccessTransaction_Mock.Object;

设置单元测试有兴趣检查的方法。

    // Success Transaction
    SuccessTransaction_Mock = new Mock<Result<Transaction>>();
    SuccessTransaction_Mock.Setup(s => s.IsSuccess())
            .Returns(true);
    SuccessTransaction_Mock.SetupGet(s => s.Target)
            .Returns(BtTransaction);
    SuccessTransaction_Mock.SetupGet(s => s.Message)
            .Returns("");

断言

    Assert.True(SuccessTransaction.IsSuccess()) // Will return the value that was setup in the moq object

假设方法是虚拟的(大多数类都有可以使用的接口),您几乎可以模拟Braintree Client库中的任何类。

© www.soinside.com 2019 - 2024. All rights reserved.