2

問題

uint テスト ケースでコード ブロックを直接呼び出しているか、そのコードのラッパーを呼び出しているという奇妙な状況に陥っています。ラッパーの場合、テストはコンパイルされます - 直接呼び出す場合、アーキテクチャの問題が発生します。

誰かが洞察を提供できるかどうか疑問に思っています

概要

SFTPアクションを実行するiOSアプリケーションを作成しており、SFTPを可能にするNMSSHライブラリを使用しています。Carthage経由で含めましたが、すべてうまく機能しています。

私の状況では、SFTP 機能をテストするためにメイン ターゲットにいくつかのコードをまとめました。

プロジェクトコード

https://github.com/jeeftor/compileBug

ソースコード

import Foundation
import NMSSH

/**
 SFTP Data Transfer Provider is a way of getting SFTP Data
 */
public class SFTPFileDataProvider {

    private var privateKeyPath: String?
    private var publicKeyPath: String?
    private let keyPassword = ""
    private let userName: String
    private let host: String
    private let port: Int

    /**
     Initializes a new SFTP Connection with host and (optional) port

     - parameter host: hostname of SFTP server
     - parameter port: _OPTIONAL_ defaults to 22
     */
    init(host: String, port: Int = 22, userName: String) {
        self.userName = userName
        self.host = host
        self.port = port
    }


    /**
     Returns a NMSFTP session with the configured data elements

     - returns: a session that is hopefully connected
     */
    func ftpSession() -> NMSFTP {
        let c = NMSSHSession.connectToHost(self.host, port: self.port, withUsername: self.userName)
        c.authenticateByPassword("password")
        return NMSFTP.connectWithSession(c)
    }

    public static func test() {
        testFTP()
    }
}


class TMonkey {
    func test() {
        testFTP()
    }
}


func testFTP() {

    let sftp: NMSFTP = SFTPFileDataProvider(host: "test.rebex.net:22", userName: "demo").ftpSession()

    for f in sftp.contentsOfDirectoryAtPath("/") {
        print (f)
    }
}

テストコード

私のテスト ケースでは、3 つの異なる方法で SFTP ロジックを呼び出そうとしました。実際にコンパイルする唯一の方法は、次のように呼び出す場合です。

func test2Good() {        
    let t = TMonkey()
    t.test()        
    testFTP()
}

これらの人のいずれかのコメントを外した場合:

// UNCOMMENT TO HAVE A BUILD FAILURE
func testCompileIssue() {
    let sftp = SFTPFileDataProvider(host: "test.rebex.net:22", userName: "demo")
}

// UNCOMMENT TO HAVE A BUILD FAILURE
func testStatic() {
    SFTPFileDataProvider.test()
}

次のエラーが表示されます。

ld: アーキテクチャ x86_64 のフレームワークが見つかりません NMSSH

ここに画像の説明を入力

単体テストをコンパイルして実行しようとすると

私が知る限り、この 2 つの「悪い」呼び出しは、基本的に呼び出しとまったく同じことを行っているため、ここではやや途方に暮れています。どちらも同じコードを呼び出していますが、そのうちの 2 つはコードのコンパイルを許可しません。

ここで私が見逃している明らかなものはありますか?誰かが同様の問題に遭遇しましたか?

4

0 に答える 0