NSubstitute se moquer de la méthode d'extension
Je veux faire le simulacre de la méthode d'extension, mais il ne fonctionne pas. Comment cela peut-il être fait?
public static class RandomExtensions
{
public static IEnumerable<int> NextInt32s(this System.Random random, int neededValuesNumber, int minInclusive, int maxExclusive)
{
//...
}
}
[Fact]
public void Select()
{
var randomizer = Substitute.For<DefaultRandom>();
randomizer.NextInt32s(3, 1, 10).Returns(new int[] { 1, 2, 3 });
}
- Autant que je sache, vous ne pouvez pas se moquer d'une méthode d'extension avec gratuit se moquant de cadres. Parce que les méthodes d'extension sont juste des méthodes statiques, et vous ne pouvez pas se moquer d'une méthode statique avec gratuit se moquant de cadres. TypeMock fait ce je pense(mais c'est au-delà de la question).
Vous devez vous connecter pour publier un commentaire.
NSubstitute ne peut pas se moquer des méthodes d'extension comme par Sriram commentaire, mais vous pouvez toujours passer un moqué d'argument à une méthode d'extension.
Dans ce cas, le
Random
classe possède des méthodes virtuelles, donc on peut se moquer de qui directement avec NSubstitute et d'autres DynamicProxy base se moquant d'outils. (Pour NSubstitute en particulier, nous devons être très prudent de se moquant de classes. Veuillez lire l'avertissement en la documentation.)NextInt32s()
fautrandom.Next(minInclusive, maxInclusive)
.NextInt32()
commefor (var i=0; i<neededValuesNumber; i++) yield return random.Next(minInclusive, maxInclusive);
je pense que le test passe, mais vous pourriez avoir besoin pour commencer une nouvelle question afin de s'attaquer au problème spécifique/s que vous essayez de résoudre.Oui vous pouvez vous moquer si vous créez une interface comme
IRandom
et d'étendre l'interface au lieu de la mise en œuvre effective. Ensuite, vous devriez être en mesure de se moquer de l'interface dans votre classe de test.Dans votre classe de test ajouter:
Par ce processus, vous êtes juste en se moquant de l'interface pas à la classe réelle.
Selon le principe SOLIDE dépendance inversion définit que la baisse de niveau de modèle ne doit pas être dépendait de haut niveau modèle, mais dépendait de l'abstrait comme interface et les moqueries concept est principalement utilisé pour se moquer de l'interface ainsi que le faible niveau de modèle n'est pas testé.