Con el fin de llamar a un método estático, necesitará una referencia directa del tipo:
RolesService.IsUserInRole(...);
En cuyo caso, si desea poder y llamar al método estático de la clase "derivada", soltar la palabra clave "nueva" wi ll le permitirá:
MockRoleService.IsUserInRole(...);
y obtener la llamada a la función esperada.
Supongo que esto no es lo que estás buscando. Es probable que tengas alguna llamada en algún lugar de tu código como la primera, y esperas que al usar una herramienta de burlarse para crear un MockRoleService, estarías inyectando este nuevo "tipo" en lugar del anterior.Lamentablemente, no es así como funciona con la estática.
Una herramienta de burlarse creará una instancia del tipo burlado e inyectará eso en lugar de una llamada para construir el tipo real. Una llamada a un método estático omite todo eso.
Como mencionó Aaronaught, probablemente debas hacer de este método un método de instancia normal. Esto permitiría que su servicio simulado sea inyectado adecuadamente en lugar de su RolesService normal, le permitirá mover la declaración del método a su interfaz IRolesService y anularla en su implementación de MockRoleService. Luego, en el código donde "obtienes" un RolesService, solo llamas al miembro de la instancia en lugar de a la estática.
IRolesService svc = MyServiceInjector.GetService<IRolesService>();
svc.IsUserInRole(...);
Creo que entiende que no puede anular un método estático. Su pregunta es "¿Alguna idea?" para sortear eso No estoy seguro si la gente se da cuenta de esto, ya que todos los votos a favor van a las respuestas que no contienen ninguna idea para evitarlo, a excepción de Aaronaught. –