実現したいこと
C#とSSH.NETを使用したツールを開発しています。
SSH.NETのバージョンは 2016.1.0 、.NET Framework 4.8です。
テストに使用しているMoqのバージョンは4.8.2です。
Sftpファイルの名前を取得するテストコードを書こうとしています。テストのたびに通信を行うのを避けたくて、Mockを使って通信せずにローカルでテストできないかと考えましたが、正しい方法が解りません。
必要なのはSftpFileのインスタンスです。ファイルのパス、名前を取得したいと思っています。
SftpFileのコンストラクタには ISftpSession インターフェースが必要です。
https://github.com/sshnet/SSH.NET/blob/2016.1.0/src/Renci.SshNet/Sftp/SftpFile.cs
しかし、 ISftpSessionインターフェースはinternalです。Moqを使用して生成する事は出来ません。
https://github.com/sshnet/SSH.NET/blob/2016.1.0/src/Renci.SshNet/Sftp/ISftpSession.cs
ISftpSessionのインスタンスを生成しているのは、 Renci.SshNet.ServiceFactory ですが、これもinternalなので生成できません。
https://github.com/sshnet/SSH.NET/blob/2016.1.0/src/Renci.SshNet/ServiceFactory.cs
ServiceFactoryを生成しているのはSftpClientのようです。しかし、SftpClientを生成するにはConnectionInfoが必要です。
ConnectionInfoはnew して生成できますが、当然接続先を設定する必要があります。
ConnectionInfoのMockを作ってどうにかしようかと試みましたが、Session.csでConnectionInfoを使用しており、ここではSSH接続を作らないといけないようです。
https://github.com/sshnet/SSH.NET/blob/2016.1.0/src/Renci.SshNet/Session.cs
つまり、ここまで調べた通りだと必ずSSHの接続が必要になってしまいます。
やはりSSH接続を行うしか無いのでしょうか?
発生している問題・分からないこと
テストコードで実現したい事は、SftpFileのインスタンスを生成し、名前を取得する事です。
皆さんならどのようにしてテストコードを作成しますか?
やはりテスト用のサーバーを立てて、テストの度に接続するでしょうか?
該当のソースコード
特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
SSH.NETを使うサンプルが少なく、テストコードは見つかりませんでした。
補足
特になし

回答1件
あなたの回答
tips
プレビュー