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

时间:2018-09-06 19:27:06

标签: .net braintree

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

该库使用的所有类(特别是“订阅”等)都有内部构造函数或需要其他内部实例。从json创建实例以将其通过函数传递的选项已消失。

也无法构造您自己的实例,因为类属性都是getter,而只有带有setter的“ * request”类,但是这些并没有太大帮助,因为应用程序无需处理它们。

Webhook测试类完全没有用,因为它给出的实例为空,仅设置了ID和状态。我的应用程序需要来自订阅的更多数据,例如交易实例,插件,开票日期等;所有这些都没有填充。

我有几个需要测试的课程,必须手动进行,这是不切实际的,而且浪费了大量时间。我还缺少另一种方法吗?

为什么图书馆是这样设计的,所以我认为保持图书馆如此封闭似乎不是很实际。

1 个答案:

答案 0 :(得分: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库中的任何类(大多数类都具有可以使用的接口)。