2017-05-16 2 views
0

J'ai une classe que je veux mocker et qui n'a qu'une interne attend quelques arguments. Je l'effet ajouté InternalsVisibleTo -attribut à mon système testé et écrit le code suivant:classe mock avec constructeur interne

var target = Substitute.For<MyClass>(testArgs); 

MyClass est la suivante:

public class MyClass 
{ 
    internal MyClass(int i) { ... } 
} 

Lorsque je reçois un débogage NotSupporetedException parce que je ne pas avoir default-constructor. Cependant, comme j'en ai un interne (qui est visible à mon test-assembly à cause de InternalsVisibleTo) je m'attendrais à ce que celui-ci soit utilisé à la place.

Bien sûr, je pourrais juste rendre le constructeur public mais cela permettrait à n'importe quel utilisateur de mon API de créer des instances de MyClass que j'aimerais éviter. Y a-t-il quelque chose qui me manque pour que ça marche?

Répondre

0

Nous ne disposons d'exposer le constructeur class' à l'API, tout ce que nous devons faire est de faire le constructeur internal protected pour le rendre visible aux classes provenant de MyClassou des classes au sein de l'assemblée où MyClass est situé. Ainsi, NSubstitute est capable de créer une classe dérivée de MyClass et redirige l'appel du constructeur vers le constructeur de base.