【问题标题】:Whats the best approach for Unit Testing with braintree用 Braintree 进行单元测试的最佳方法是什么
【发布时间】:2019-02-12 02:57:38
【问题描述】:

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

库使用的所有类 - 特别是“订阅”等等 - 都有内部构造函数或期望其他内部实例。诸如从 json 创建实例以通过函数传递它的选项已失效。

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

Webhook 测试类完全没用,因为它提供的实例是空的,只有 id 和状态集。我的应用程序需要来自订阅的更多数据,例如事务实例、插件、计费日期等;所有这些都没有填充。

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

为什么图书馆要这样设计,我认为让图书馆如此封闭似乎不太实用。

【问题讨论】:

  • 您对此有进一步了解吗?
  • @displayname 虽然我应该在找到解决方案时发布此内容,但我花了几周时间才忘记了这个问题。希望对你有用。
  • 感谢您的升级。是的,很高兴看到其他人如何解决这个问题。 :)

标签: .net braintree


【解决方案1】:

对于那些仍在寻找的人,没有办法直接对类本身进行单元测试而不编辑库。从好的方面来说,使用 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 客户端库中的任何类(大多数类都有可以使用的接口)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2010-09-27
    • 2013-10-18
    • 2010-09-05
    相关资源
    最近更新 更多