كيف يمكنني موك هذا الكائن DotNetOpenAuth الاستجابة؟

StackOverflow https://stackoverflow.com/questions/820308

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي طريقة التي تأخذ في DotNetOpenAuth (والمعروفة رسميا باسم DotNetOpenId) Response موضوع. لي طريقة مقتطفات أي ادعى البيانات، التدقيق لمعرفة ما إذا كان يوجد هذا المستخدم في نظامنا، yadda yadda yadda ... وعند الانتهاء من عوائد المثال المستخدم auth'd.

والآن .. كيف يمكنني استخدام <م> موك للسخرية حتى هذا الكائن استجابة، لاختبار بلدي أسلوب المصادقة (AuthenticateUser()

switch (response.Status)
{
    case AuthenticationStatus.Authenticated:

    User user = null;
    try
    {
        // Extract the claimed information and 
        // check if this user is valid, etc.
        // Any errors with be thrown as Authentication Errors.
        user = _authenticationService.AuthenticateUser(response) as User;
    }
    catch (AuthenticationException exception)
    {
        ViewData.ModelState.AddModelError("AuthenticationError", exception);
    }

    .. other code, like forms auth, other response.status' etc. ..
}

وإطار الاستهزاء: موك
اللغة:. NET C # 3.5 SP1
الكائن رد: مأخوذة من إطار DotNetOpenAuth

هل كانت مفيدة؟

المحلول

وأنا لست على دراية موك على وجه الخصوص، ولكن الكائن استجابة هو نوع التي تطبق DotNetOpenAuth.OpenId.RelyingParty.IAuthenticationResponse، لذلك يمكن أن سخر بسهولة من خلال خلق فئة التي تطبق نفس واجهة وعلى استعداد للعودة إلى نفس النوع من القيم.

و... فقط تحميل موك وسخر تصل إلى IAuthenticationResponse مثل ذلك:

var response = new Mock<IAuthenticationResponse>(MockBehavior.Loose);
response.SetupGet(r => r.ClaimedIdentifier)
        .Returns("http://blog.nerdbank.net/");
response.SetupGet(r => r.Status)
        .Returns(AuthenticationStatus.Authenticated);
response.SetupGet(r => r.FriendlyIdentifierForDisplay)
        .Returns("blog.nerdbank.net");

IAuthenticationResponse resp = response.Object;
Console.WriteLine(resp.ClaimedIdentifier);

والواضح بدلا من إرسال النتيجة إلى Console.WriteLine كنت تريد تمرير الكائن resp إلى الطريقة التي تقوم باختبارها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top