How to Mock the Internal Method of a class?

后端 未结 6 2052
别跟我提以往
别跟我提以往 2020-12-05 18:07

I have a class which has a internal method and i want to mock the internal method . But i am unable to mock it i.e. it is not calling the mocked function but calling the ori

6条回答
  •  时光取名叫无心
    2020-12-05 18:42

    You can easily mock internal virtual methods by adding the following to your AssemblyInfo.cs:

    [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] // namespace in Moq
    [assembly: InternalsVisibleTo("YourTestClass")]
    

    If your assembly is strongly named, you'll need to include the public key for DynamicProxyGenAssembly2 (Thanks to comment by @bvgheluwe; source: Moq quickstart guide):

    [assembly:InternalsVisibleTo("DynamicProxyGenAssembly2,PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
    

    I don't understand why the accepted answer says you should never do it. Isn't that what you do when you use the 'Extract and Override' (local factory method) dependency injection technique outlined by Roy Osherove in Chapter 3 of The Art Of Unit Testing?

提交回复
热议问题