2016-05-31 73 views
0

已经写了UIPrintInteractionControllerDelegate,我想单位printInteractionController:choosePaper:如何创建一个UIPrintPaper测试UIPrintInteractionControllerDelegate

它的声明测试其纸张选择功能:

optional func printInteractionController(_ printInteractionController: UIPrintInteractionController, choosePaper paperList: [UIPrintPaper]) -> UIPrintPaper 

这是调用它的一个简单的事情使用预定义的UIPrintPaper值并检查输出。但是我无法创建UIPrintPaper实例。这里是UIPrintPaper是如何宣称:

NS_CLASS_AVAILABLE_IOS(4_2)__TVOS_PROHIBITED @interface UIPrintPaper : NSObject 

+ (UIPrintPaper *)bestPaperForPageSize:(CGSize)contentSize withPapersFromArray:(NSArray<UIPrintPaper *> *)paperList; // for use by delegate. pass in list 

@property(readonly) CGSize paperSize; 
@property(readonly) CGRect printableRect; 

@end 

的纸型和printableRect属性是只读的并且没有初始化定义它们。我如何创建UIPrintPaper来为我的测试表示不同的纸张尺寸? (A4,美国信纸,4x6的...)

回答

1

无法控制UIPrintPaper,但它的子类覆盖它的只读属性是简单明了:

class FakePrintPaper: UIPrintPaper { 

    private let size: CGSize 
    override var paperSize: CGSize { return size } 
    override var printableRect: CGRect { return CGRect(origin: CGPointZero, size: size) } 

    init(size: CGSize) { 
     self.size = size 
    } 
} 
0

使用UIPrintPaper类方法bestPaperForPageSize

let paper = UIPrintPaper.bestPaperForPageSize(CGSize(...), withPapersFromArray: [...]) 

我想你会想用这样的:

class MyClass: NSObject { } 

extension MyClass: UIPrintInteractionControllerDelegate { 
    func printInteractionController(printInteractionController: UIPrintInteractionController, choosePaper paperList: [UIPrintPaper]) -> UIPrintPaper { 
     return UIPrintPaper.bestPaperForPageSize(CGSize(...), withPapersFromArray: paperList) 
    } 
} 

哪里CGSize是您的纸张尺寸。

+0

这是同样的问题,我如何创建UIPrintPaper来调用此方法? (它的withPapersFromArray:是一个UIPrintPaper的数组) – Clafou

+0

@Clafou编辑我的答案,我想你想采取的方法。 – JAL

+0

这就是我的实现,但事实证明,bestPaperForPageSize并不总是满足你的需求。因此,我需要编写这些单元测试(也可能是为了实现我自己的逻辑 - 将会看到我可以编写单元测试)。我的问题是关于创建UIPrintPaper,以便我可以对此进行单元测试。 – Clafou

0

我不认为你应该创建UIPrintPaper。苹果的API调用:

- (UIPrintPaper*)printInteractionController:(UIPrintInteractionController *)printInteractionController choosePaper:(NSArray<UIPrintPaper *> *)paperList 

...与您的打印机支持的所有UIPaper的数组你UIPrintInteractionControllerDelegate。如果你没有得到你想要的那个,那么打印机不支持它。

因此,不要创建一个实现此委托调用,并从打印机支持的参数中返回正确的UIPrintPaper。

+0

是的,但正如我在我的问题中解释的,我需要这个单元测试的目的。在这种情况下,我不能依靠打印机来提供测试所需的UIPaper实例。 – Clafou

+0

为什么不呢?我使用打印机模拟器来完成这个。您指定加载的纸张。附带xcode支持pkg – xaphod

+0

单元测试旨在可重复,完全自动化和自包含。 – Clafou

相关问题