【发布时间】:2012-02-15 12:33:07
【问题描述】:
我想用 NUnit 和 Rhino Mocks 对以下函数进行单元测试。该函数使用给定的参数创建一个RestSharp.RestRequest,并将请求发送给dataAccessApi:
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实现了另一个接口,希望这些方法的引用相等——它仍然无法通过测试。 -
IDataAccessApi接口是如何定义的,更具体地说,Request<T>方法的签名是什么? -
我添加了
IDataAccessApi和IRestExecution-Interface 的源代码。我发现的另一点是:request也不是引用相等吗?
标签: c# unit-testing nunit rhino-mocks restsharp