Unit testing 如何对在密封的非泛型类中调用泛型方法的非泛型方法进行单元测试?

Unit testing 如何对在密封的非泛型类中调用泛型方法的非泛型方法进行单元测试?,unit-testing,rhino-mocks,Unit Testing,Rhino Mocks,使用[程序集:InternalsVisibleTo()]和 public sealed class AppService { //TODO: fix dev's spelling //want to test this public AddSubscribtionResponse AddSubscribtion(AddSubscribtionRequest request) { return ExecuteQueryProc<AddSubsc

使用
[程序集:InternalsVisibleTo()]

public sealed class AppService
{
    //TODO: fix dev's spelling
    //want to test this
    public AddSubscribtionResponse AddSubscribtion(AddSubscribtionRequest request)
    {
        return ExecuteQueryProc<AddSubscribtionResponse>("spAddAppToUserGroup", request).First();
    }

    //I want to stub or interaction test the call to here
    #if DEBUG
    internal
    #endif
    List<T> ExecuteQueryProc<T>(string query, object parameters = null)
    {
        var cn=GetConnection();
        //DatabaseCommand is a static class =(
        return DatabaseCommand.ExecuteQueryProc<T>(cn, query, parameters);
    }
}
公共密封类AppService
{
//TODO:修复dev的拼写
//想测试一下吗
公共addSubscriptionResponse addSubscription(addSubscriptionRequest请求)
{
返回ExecuteQueryProc(“SPADDaptoUserGroup”,request).First();
}
//我想在这里对调用进行存根或交互测试
#如果调试
内部的
#恩迪夫
List ExecuteQueryProc(字符串查询,对象参数=null)
{
var cn=GetConnection();
//DatabaseCommand是一个静态类=(
return DatabaseCommand.ExecuteQueryProc(cn,查询,参数);
}
}
我试图让Rhino存根或拦截ExecuteQueryProc方法的每次尝试都失败了

var service = MockRepository.GeneratePartialMock<AppService>(null);
service.Stub(f => f.ExecuteQueryProc<AddSubscribtionRequest>(null, null)).IgnoreArguments().Return(new List<AddSubscribtionRequest>());

var expected = new AddSubscribtionRequest();
var actual = service.AddSubscribtion(expected);
var service=MockRepository.GeneratePartialMock(null);
service.Stub(f=>f.ExecuteQueryProc(null,null)).IgnoreArguments().Return(newlist());
var expected=new addSubscriptionRequest();
var实际值=service.AddSubscribtion(预期值);
投掷
System.InvalidOperationException:ExecuteReader:CommandText属性尚未初始化

从类中删除“密封的”(如果Rhino.Mocks不能从类继承,则它不能代理类)。并且ExecuteQueryProc必须是虚拟的,才能存根其功能。

它被设置为虚拟的,当我没有密封它时,我无法模拟它。您能否澄清“无法模拟它”的含义?您是否有任何错误?请更新问题以显示您正在测试的新代码(在使方法虚拟且类非密封后)。无法模拟它意味着调用转到原始调用,并且未被拦截。请使用类定义和方法签名更新问题(不需要代码)。还包括完整的“InternalsVisibleTo”属性定义,以便我们可以查看是否正确。哪个类定义?这是测试中的确切类定义。对可见的内部正在工作,因为visual studio intellisense可以查看所有内部方法。