NUnitとRhino Mocksで以下の関数をユニットテストしたいと思います。この関数はRestSharp.RestRequest
を作成し、dataAccessApi
への要求を与えるために与えられたパラメータを使用しています。ユニット - NUnitでアクションをテストする
public void CopyToUserSession(string uri, string sourcePath)
{
RestRequest request = new RestRequest(uri, Method.POST);
request.AddParameter("source-path", sourcePath);
dataAccessApi.Request<object>(request, restExecution.Get);
}
これはテストクラスである:
public void CopyToUserSession_ValidUriAndParameter_CallDataAccessRequest()
{
// Arrange
var dataAccessApi = MockRepository.GenerateMock<IDataAccessApi>();
var restExecution = MockRepository.GenerateMock<IRestExecution>();
var sinkNodeResource = new SinkNodeResource(dataAccessApi, restExecution);
string uri = "http://SomeUri.com";
string sourcePath = "Some Source Path";
RestRequest request = new RestRequest(uri, Method.POST);
request.AddParameter("source-path", sourcePath);
// Act
sinkNodeResource.CopyToUserSession(uri, sourcePath);
// Assert
dataAccessApi.AssertWasCalled(x => x.Request<object>(request, restExecution.Get));
}
IDataAccessApi ...:
public interface IDataAccessApi
{
void Request<T>(RestRequest request, Action<T> callbackAction) where T : new();
}
... IRestExecution:
public interface IRestExecution
{
void Get(object o);
void Put(object o);
void Post(object o);
void Delete(object o);
}
このテストは(x.Test("Some String")
のように)コールするのが簡単な関数では機能しましたが、そのアクションではnew RestExecution().Get
のコールではテストしません。
ありがとうございました!
編集: @ rich.okellyコメントに関するコードが変更されました。
編集:追加されたインターフェイスのためのコード
アサーションに渡される 'RestExecution.Get'方式グループが異なる(同じ参照しない)一あなたのコードで呼び出されます。 –
ありがとう!私はコードを変更し、 'restExecution'のためにもう一つのInterfaceを実装しました。メソッドが参照を等しくすることを期待しました - ビットはまだテストに合格しません。 – DIF
'IDataAccessApi'インタフェースはどのようにして定義されていますか、具体的には' Request 'メソッドのシグニチャは何ですか? –