测试特定图像是否已复制到粘贴板

时间:2016-03-18 18:37:18

标签: ios objective-c xctest uipasteboard

我正在编写一个测试来验证将图像复制到粘贴板的功能。

这是测试,因为我更喜欢写它:

// reset the paste board
UIPasteboard.generalPasteboard.image = nil; //<-- this explodes
XCTAssertNil(UIPasteboard.generalPasteboard.image);

// Grab some random existing image
UIImage *image = [UIImage imageNamed:@"some-image"];
MJKMyClass *myInstance = [[myInstance alloc] initWithImage:image];
[myInstance doSomethingThatCopiesImageToPasteboard]

XCTAssertNotNil(UIPasteboard.generalPasteboard.image);

这失败了:

failed: caught "NSInvalidArgumentException", "-[UIPasteboard setImage:]: Argument is not an object of type UIImage [(null)]"

这是令人惊讶的,因为根据UIPasteboard标题,图像是一个可以为空的字段。

@interface UIPasteboard(UIPasteboardDataExtensions)
<...>    
@property(nullable,nonatomic,copy) UIImage *image __TVOS_PROHIBITED;
<...>
@end

我认为这意味着他们正在对参数进行运行时检查,即使它可以为空。

我尝试过的事情:

  • 通过id比较对象不起作用,因为UIImage是由generalPastboard.image复制的(每次调用UIPasteboard.generalPasteboard.image时都可以使用不同的实例)
  • 通过PNG表示进行比较可能有效,但似乎很粗糙。
  • 到目前为止,按图像尺寸进行比较是我最接近的赌注,但也似乎是迂回曲目。

1 个答案:

答案 0 :(得分:3)

您可以使用nil属性清除粘贴板而无需传递items

UIPasteboard.generalPasteboard.items = @[];

或者在Swift中:

UIPasteboard.generalPasteboard().items = []

为了比较UIImages,您可能想看一些其他问题: