ファイルを提供するサービスをテストするためにどのようにサービスExcelはServiceStack:ユニットIは、Webサービスを持っている
public class FileResult : IHasOptions, IStreamWriter, IDisposable
{
private readonly Stream _responseStream;
public IDictionary<string, string> Options { get; private set; }
public BinaryFileResult(byte[] data)
{
_responseStream = new MemoryStream(data);
Options = new Dictionary<string, string>
{
{"Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
{"Content-Disposition", "attachment; filename=\"InvoiceFile.xlsx\";"}
};
}
public void WriteTo(Stream responseStream)
{
if (_responseStream == null)
return;
using (_responseStream)
{
_responseStream.WriteTo(responseStream);
responseStream.Flush();
}
}
public void Dispose()
{
_responseStream.Close();
_responseStream.Dispose();
}
}
としてサービスからreturedされたオブジェクトを
public class ReportService : Service
{
public IReportRepository Repository {get; set;}
public object Get(GetInvoiceReport request)
{
var invoices = Repository.GetInvoices();
ExcelReport report = new ExcelReport();
byte[] bytes = report.Generate(invoices);
return new FileResult(bytes);
}
}
と私のセットアップファイルさて、Webサービスはブラウザでテストしたときにうまく動作します。ユニットテストからテストすると、エラーメッセージが表示されます。以下はエラーメッセージです:で始まる 文字列を得た型定義 '{'、期待してシリアル化された形で始めるべき 'FileResult'::System.Runtime.Serialization.SerializationException
PK \ u0003 \ u0004 \\0000 \ u0008 \ u0000 \ u0008 \ u0000 \ u000b5 \ u0000 \ u003 \ u0000 \ u0000 \ u003 \ u0000 \ u0000 \ u0000 [Content_Types].xml at ServiceStack.Text.Common.DeserializeTypeRefJson.StringToType(TypeConfigtypeConfig、StringSegment strType、EmptyCtorDelegate ctorFn、 辞書
2 typeAccessorMap) at ServiceStack.Text.Common.DeserializeType
1. <> c__DisplayClass2_0.b__1(StringSegment ServiceStack.Text.JsonSerializer.DeserializeFromStream [T](ストリームでServiceStack.Text.JsonSerializer.DeserializeFromStringでServiceStack.Text.Json.JsonReader1.Parse(StringSegment value) at ServiceStack.Text.Json.JsonReader
1.Parse(String値)
[T](文字列 値)での値) ServiceStack.ServiceClientBase.Send [たTResponse](文字列HTTPMETHOD、 ストリングrelativeOrAbsoluteUrl、オブジェクト要求)未満
で ServiceStack.ServiceClientBase.GetResponse [たTResponse](にWebResponse にWebResponse)で ストリーム)は、ユニットテストであります
:私は、Webサービスをテストするために使用しました[Test]
public void TestInvoiceReport()
{
var client = new JsonServiceClient("http://localhost/report/");
var authResponse = client.Send(new Authenticate
{
provider = CredentialsAuthProvider.Name,
UserName = "[User Name]",
Password = "[Password]"
});
var requestDTO = new GetInvoiceReport();
var ret = client.Get<FileResult>(requestDTO);
Assert.IsTrue(ret != null);
}
編集:私は私の要求DTOクラスの定義を含めています :すべてのヘルプは高く評価され
[Route("/invoices", "GET")]
public class GetInvoiceReport: IReturn<FileResult>
{
}
。
mythz:私は私の要求DTOのクラスを含めるために、質問を更新しました。BTW、私は私の要求DTOに ":IReturn"を追加してあなたの提案を試み、 "byte [] response = client.Get(new GetInvoiceReport());"私のユニットテストでは、私はまだ同じエラーメッセージが表示されます。 –
@ErmiasYあなたの質問を更新して、あなたが使用している正確なコードと新しいコードの新しい例外を表示してください。 – mythz
申し訳ありません、異なるブラウザのタブから編集していました。問題は完全に今更新する必要があります。 –