@ boris-lipschitzは正しいですが、あなたの仕事が大雑把なとき(opと同じですが)、hostを呼び出してから何もすることはできません。 RunAndBlock()。
ただし、ホストを別のスレッドで実行する場合は、必要に応じてテストを続行できます。ただし、テストの最後に、ジョブがいつ実行されたかを知るために何らかのポーリングを行う必要があります。
例
機能試験する(作成ブロブによってトリガ別のBLOBからの単純なコピー):
public void CopyBlob(
[BlobTrigger("input/{name}")] TextReader input,
[Blob("output/{name}")] out string output)
{
output = input.ReadToEnd();
}
テスト機能:
[Test]
public void CopyBlobTest()
{
var blobClient = GetBlobClient("UseDevelopmentStorage=true;");
//Start host in separate thread
var thread = new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
var host = new JobHost();
host.RunAndBlock();
});
thread.Start();
//Trigger job by writing some content to a blob
using (var stream = new MemoryStream())
using (var stringWriter = new StreamWriter(stream))
{
stringWriter.Write("TestContent");
stringWriter.Flush();
stream.Seek(0, SeekOrigin.Begin);
blobClient.UploadStream("input", "blobName", stream);
}
//Check every second for up to 20 seconds, to see if blob have been created in output and assert content if it has
var maxTries = 20;
while (maxTries-- > 0)
{
if (!blobClient.Exists("output", "blobName"))
{
Thread.Sleep(1000);
continue;
}
using (var stream = blobClient.OpenRead("output", "blobName"))
using (var streamReader = new StreamReader(stream))
{
Assert.AreEqual("TestContent", streamReader.ReadToEnd());
}
break;
}
}
私が言うには、あなたはユニットテストをすることができますですとにかくエントリですWebJobのボイドメソッド内の関数あなたがたくさんのコードを持ってはならないことを指摘してください。実際に統合テストを行う場合は、コード内に条件を追加して、最終的にアサートできるデータストアへの応答を出力します。もちろんこれはテストメッセージのためのものです。 – TusharJ