【问题标题】:C# Testing method with StorageFile as parameter以 StorageFile 为参数的 C# 测试方法
【发布时间】:2012-12-29 20:35:29
【问题描述】:

首先,这是一个 Microsoft Store winrt 库,我正在尝试使用此签名测试公共方法:

string GetStringFromFile(StorageFile storageFile);

但是StorageFile 没有构造函数,所以我无法在我的 NUnit 测试代码上创建它。另外,我认为我不能在 WinRt 上使用 Moq 或任何其他 Mocking 库。

我一直在寻找从 IStorageFile 接口创建一个手工制作的假货​​,但它里面有很多方法,我再次坚持另一个深层属性,指出 StorageFile 中没有公共构造函数的类作为@例如 987654325@。

那么...用StorageFile 和/或ImageProperties 类测试方法的最佳方法是什么?

【问题讨论】:

  • 您可以创建一个 StorageFileWrapper 类,该类将 IStorageFile 作为其 ctor 的参数。使用这个包装器,您可以创建任何您喜欢的方法,将调用转发到被包装的对象。

标签: c# mocking windows-runtime nunit .net-4.5


【解决方案1】:

StorageFile 类实现了一个接口IStorageFile,因此您应该将依赖项更改为该接口,然后您可以使用模拟或存根(如果您不能使用 Moq 等,可能是您创建的类)。

【讨论】:

  • 编程接口而不是具体类是模拟的方式。
  • 你应该始终依赖抽象而不是实现,不仅仅是因为它使模拟更容易(这是 SOLID 原则中的 D)
  • 好吧,也许我没有以正确的方式表达我的问题。 StorageFileIStorageFile 接口,我知道。但是ImageProperties(也在我的示例中)在示例中没有任何接口实现属性CameraManufacturer。如何测试第二个类?
  • @Ferpega 好吧,我明白你的意思了。似乎接口不包含该类指定的所有属性。基于此,您有 2 个选项。 1)创建一个包装类,它公开它自己的接口,您可以对其进行编程 2)使参数类型动态,然后您可以向其发送任何具有正确属性名称的东西。
  • @Trevor Pilley 我理解这两种方式,但我认为我更喜欢包装方式。 :-) 谢谢。
【解决方案2】:

假设这个方法是你的一个,而不是你无法控制的另一个库中的东西;我会更改签名,因此参数是 IStorageFile 类型而不是具体类。然后,您可以为测试创建一个假的,但在应用程序中使用真实的 StorageFile。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 2020-06-05
    相关资源
    最近更新 更多