Насмешка FormsIdentity. Билет. UserData с Moq

Никакие опции не потребовали

Regex:

\w+|"[\w\s]*"

C#:

Regex regex = new Regex(@"\w+|""[\w\s]*""");

Или если необходимо исключить "символы:

    Regex
        .Matches(input, @"(?<match>\w+)|\""(?<match>[\w\s]*)""")
        .Cast<Match>()
        .Select(m => m.Groups["match"].Value)
        .ToList()
        .ForEach(s => Console.WriteLine(s));
6
задан codette 9 October 2009 в 22:55
поделиться

1 ответ

Я ни в коем случае не эксперт по модульным тестам, просто промочу ноги в этой области.

Разве не излишне имитировать Identity в модульном тесте, потому что код Identity - это код, который, как вы можете предположить, работает уже изолированно? (т.е. это код Microsoft?) Например, при модульном тестировании вашего собственного кода вам не нужно имитировать один из объектов Framework. Я имею в виду, вам когда-нибудь понадобится издеваться над списком или словарем?

При этом, если вы ДЕЙСТВИТЕЛЬНО хотите протестировать свой код изолированно или по какой-то причине иметь супертонкий контроль над данными, возвращаемыми в Userdata, вы не можете вы просто пишете интерфейс для взаимодействия между идентификатором и вашим кодом?

Public Interface IIdentityUserData
   Readonly Property UserData As String
End Interface

Public Class RealIdentityWrapper 
 Implements IIdentityUserData

Private _identity as FormsIdentity
Public Sub New(identity as FormsIdentity)
    'the real version takes in the actual forms identity object
    _identity = identity
End Sub
Readonly Property UserData As String Implements IIDentityUserData.UserData
     If not _identity is nothing then
         Return _identity.Ticket.UserData
     End If
End Property
End Class

 'FAKE CLASS...use this instead of Mock
 Public Class FakeIdentityWrapper 
 Implements IIdentityUserData


 Readonly Property UserData As String Implements IIDentityUserData.UserData
     If not _identity is nothing then
          Return "whatever string you want"
     End If
 End Property
 End Class



'here's the code that you're trying to test...modified slightly
 Dim fIdentity As FormsIdentity= HttpContext.Current.User.Identity
 Dim identityUserData As IIdentityUserData

 identityUserData = 
 'TODO: Either the Real or Fake implementation. If testing, inject  the Fake implementation. If in production, inject the Real implementation

 Dim userData as String
 userData = identityUserData.UserData

Надеюсь, это поможет

0
ответ дан 18 December 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: