C# 如何创建SearchResponse类(没有公共构造函数)的实例?

C# 如何创建SearchResponse类(没有公共构造函数)的实例?,c#,ldap,mocking,directoryservices,C#,Ldap,Mocking,Directoryservices,我想模拟一个从名称空间System.DirectoryServices.Protocols返回SearchResponse对象的方法。我用最小起订量。我需要创建它的实例。它没有任何构造函数 通常在我的项目中,它是将DirectoryResponse对象强制转换为SearchResponse类的结果,其中DirectoryResponse是LdapConnection对象的SendRequest方法的结果 有没有办法创建SearchResponse类的实例?您可以通过SearchResponseW

我想模拟一个从名称空间System.DirectoryServices.Protocols返回SearchResponse对象的方法。我用最小起订量。我需要创建它的实例。它没有任何构造函数

通常在我的项目中,它是将DirectoryResponse对象强制转换为SearchResponse类的结果,其中DirectoryResponse是LdapConnection对象的SendRequest方法的结果

有没有办法创建SearchResponse类的实例?

您可以通过
SearchResponse
With Members.CallOriginal标志来确保调用原始实现

*在使用之前,请确保将状态设置为假的

另一种方法是使用。隔离器会自动为ctors参数创建伪参数,传递它们并返回类的实例(SearchResponse)。您可以创建一些依赖项或将所有依赖项传递给FakeDependencies方法,并在创建时将它们委托给constractor

示例:

class MyClass
{
    public SearchResponse GetSearchResponse()
    {
        return null;
    }
}
真实:

[TestMethod]
public void CreateSearchResponse_realObjectWithFakedDependences()
{
var myClass=新的myClass();
SearchResponse SearchResponse=Isolate.false.dependentials();
隔离.WhenCalled(()=>myClass.GetSearchResponse()).WillReturn(searchResponse);
SearchResponse sr=myClass.GetSearchResponse();//返回SearchResponse
//...
}
假:

[TestMethod]
public void CreateSearchResponse\u FakeObject\u StateShouldBeSet\u OriginalBehavior()
{
var myClass=新的myClass();
SearchResponse fakeSearchResponse=Isolate.Fake.Instance(Members.CallOriginal,ConstructorWillBe.Called);
隔离.WhenCalled(()=>myClass.GetSearchResponse()).WillReturn(fakeSearchResponse);
SearchResponse sr=myClass.GetSearchResponse();//返回fakeSearchResponse
//...
}

我终于找到了一个基于

[TestMethod]
public void CreateSearchResponse_RealObjectWithFakedDependencies()
{
    var myClass = new MyClass();
    SearchResponse searchResponse = Isolate.Fake.Dependencies<SearchResponse>();
    Isolate.WhenCalled(() => myClass.GetSearchResponse()).WillReturn(searchResponse);

    SearchResponse sr = myClass.GetSearchResponse(); // returns SearchResponse

    //...
}
[TestMethod]
public void CreateSearchResponse_FakeObject_StateShouldBeSet_OriginalBehavior()
{
    var myClass = new MyClass();
    SearchResponse fakeSearchResponse = Isolate.Fake.Instance<SearchResponse>(Members.CallOriginal, ConstructorWillBe.Called);
    Isolate.WhenCalled(() => myClass.GetSearchResponse()).WillReturn(fakeSearchResponse);

    SearchResponse sr = myClass.GetSearchResponse(); // returns fakeSearchResponse

    //...
}
public class SearchResponseBuilder
{
    public static SearchResponse Build(string errorMessage)
    {
        var ctors = typeof (SearchResponse).GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance);
        var neededCtor = ctors.First(
            ctor =>
                ctor.GetParameters().Count() == 5);
        SearchResponse response = neededCtor.Invoke(new object[]
        {
            "distinguishedName",
            null, // System.DirectoryServices.Protocols.DirectoryControl[]
            null, // System.DirectoryServices.Protocols.ResultCode
            errorMessage,
            null // System.Uri[]
        }) as SearchResponse;
        return response;
    }
}