编写了UIPrintInteractionControllerDelegate之后,我希望在printInteractionController:choosePaper:中对其纸张选择功能进行单元测试。

它的声明是:

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


paperSize和printableRect属性为只读属性,没有用于定义它们的初始化程序。如何创建UIPrintPaper来代表我的测试的不同纸张尺寸? (A4,美国信件,4x6 ...)

最佳答案

无法控制UIPrintPaper,但是将其子类化以覆盖其readonly属性很简单:

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
    }
}

关于swift - 如何创建UIPrintPaper来测试UIPrintInteractionControllerDelegate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37551043/

10-10 23:25