以下のように、FTP サーバーからファイルのリストを取得する方法があります。
public List<string> FetchFilesList()
{
var request = WebRequest.Create(FtpServerUri);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = Credentials;
using (var response = request.GetResponse())
{
var responseStream = response.GetResponseStream();
using (var reader = new StreamReader(responseStream))
{
var fileNamesString = reader.ReadToEnd();
var fileNames = fileNamesString.Split(
Environment.NewLine.ToCharArray(),
StringSplitOptions.RemoveEmptyEntries);
return fileNames.ToList();
}
}
}
FTP の代わりにローカル ディレクトリにアクセスする UT を作成しようとしています。
ここに私のUTがあります:
// ftpFetcherTestWrapper is thin wrapper to expose properties to UT
// TODO: For some reason providing credentials like this doesn't work :(
// It also doesn't work for DefaultNetworkCredentials
ftpFetcherTestWrapper.CredentialsExposed = CredentialCache.DefaultCredentials;
// As we are using wrapper we substitude FtpServerUri to our fake-local folder
ftpFetcherTestWrapper.ServerUriExposed = new Uri(directoryName);
var filesList = ftpSFetcherTestWrapper.FetchFilesList();
私は受け取りますSystem.Net.WebException: "Access to the path 'D:\\SomePathToUnitTestsExecutionFolder\\XmlFiles' is denied."
Q:単体テストでリモート FTP の代わりに WebRequest がローカル フォルダーにアクセスするために使用する Windows/ネットワーク資格情報を渡すことは可能ですか?
[編集]
ftp パスの代わりにローカル ファイル パスを指定すると、ファイル コンテンツのフェッチをテストできることに注意してください。
public XDocument FetchFile(string fileName)
{
var client = new WebClient();
client.Credentials = Credentials;
var fileUri = new Uri(FtpServerUri, fileName);
var downloadedXml = client.DownloadString(fileUri);
return XDocument.Parse(downloadedXml);
}
また、私が行っていることが単体テストの 100% フィートの定義ではないことも承知していますが、それでもこれは良いテストだと思います。