我目前正在使用.NET SDK处理我的asp.net核心项目的付款。我想使用单元测试自动化测试,但事实证明这很困难。
库使用的所有类 - 特别是“订阅”以及更多 - 具有内部构造函数或期望其他内部实例。从json创建实例以将其传递给函数的选项已经完成。
也不可能构造一个自己的实例,因为类属性都是getter,只有带有setter的“* request”类但这些并没有多大帮助,因为应用程序不必处理它们。
Webhook测试类完全没用,因为它提供的实例是空的,只有id和status设置。我的应用程序需要来自订阅的更多数据,例如Transaction实例,Addons,Billing日期等等;所有这些都没有填充。
我有几个需要测试的类,而且必须手动完成这些操作只是简单而浪费了很多时间。我还缺少另一种方法吗?
为什么图书馆这样设计,在我看来保持图书馆如此封闭似乎不太实际。
对于那些仍在寻找的人,没有可能的方法直接对类本身进行单元测试而无需编辑库。从好的方面来看,并不是所有的希望都会消失,使用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库中的任何类。