JustMock R1 2022—Optimisation des performances, VS 2022, .NET 6

Telerik JustMock R1 2022 apporte une excellente optimisation des performances, la possibilité de désactiver des fonctionnalités, la prise en charge de C# 10 et la prise en charge des versions officielles de VS 2022 et .NET 6.
Hé, les développeurs ! C'est le moment de la sortie de R1 2022 pour notre cadre de simulation, Telerik JustMockqui inclut une optimisation significative des performances, la possibilité de désactiver les fonctionnalités qui affectent les performances, la prise en charge de C# 10, ainsi que la prise en charge des versions officielles de Visual Studio 2022 et . NET 6. Voyons les détails.
Optimisation des performances (bêta)
Ceux d'entre vous qui suivent les versions de JustMock savent déjà que, l'année dernière, nous avons publié de nombreuses optimisations autour du profileur JustMock. Avec R1 2022, nous avons permis au profileur de travailler à la demande. Qu'est-ce que ça veut dire? Pour expliquer, je vais commencer par le fonctionnement de JustMock auparavant. Comme vous le savez, JustMock est capable de se moquer de tout. Cette capacité est obtenue en utilisant un profileur qui insère le code requis dans tout le code compilé. Ce processus est connu sous le nom d'instrumentation. L'optimisation permet désormais au profileur d'ignorer cette étape et d'instrumenter le code à la demande lorsque vous utilisez l'API JustMock.
L'optimisation est assez importante et varie en fonction de votre scénario exact. Nos mesures montrent que dans les pires scénarios, le gain de performance est d'environ 40 % et dans le meilleur des cas, d'environ 90 %. Vous vous demandez probablement quel est le pire scénario. Un tel scénario se produit lorsque presque tout le code dont vous disposez est simulé dans certains des tests unitaires. Dans le meilleur des cas, c'est le contraire, lorsque presque aucun code n'est moqué.
Comme le changement dans le fonctionnement de JustMock est important, nous publions cette optimisation en version bêta.
Vous vous demandez probablement comment vous pouvez tirer parti de JustMock. tout ça. Eh bien, c'est facile. Ouvrez simplement l'extension JustMock Visual Studio, accédez à Options et activez l'option "On Demand Instrumentation Enabled". Telerik -> JustMock.
Parce que toutes les méthodes ne seront pas instrumentées à chaque fois, deux changements fonctionnels de rupture surviennent.
Le premier est lié à la moquerie du nouvel opérateur . Avec l'instrumentation normale, il est possible qu'une instance déjà existante d'une classe particulière soit renvoyée lors de la création d'une nouvelle instance de cette classe. Voici un exemple :
NUM
Dépendez-vous
{
// ARRANGE - Chaque nouvelle instanciation de la classe Foo doit renvoyer une instance prédéfinie.
var testObj =
new
Foo();
[14=
"Test"
;
Mock.Arrange(() =>
new
Foo()).Returns(testObj);
// ACT
var myNewInstance =
new
Foo();
// ASSERT
[296590] ]
Assert.AreEqual(
"Test"
myNewInstance.MyProp);
}3 ]Avec l'optimisation à la demande activée, se moquer du nouvel opérateur ne fonctionne pas dans tous les cas. Pour cette raison, vous devez utiliser
IgnoreInstance
dans ces cas. Voici un exemple de la façon de retravailler l'exemple précédent :
NUM
DU CANUSUSEIGNOREINSTANCE ()
{
// ARRANGE - Chaque nouvelle instanciation de la classe Foo devrait avoir une propriété avec une valeur prédéfinie.
var testObj =
new
Foo();
Mock.Arrange(() => testObj.MyProp).IgnoreInstance().Returns(
"Test "
);
// ACT
var maNouvelleInstance =
nouveau
; ASSERT
}
Le deuxième changement fonctionnel avec rupture est lié à l'utilisation des actions, en particulier lors de la définition d'une valeur de propriété avec la méthode ArrangeSet(Action). Voici un exemple :
NOI
bar_onsetto1_shouldnotifier ()
{
// Arranger
// // Création d'une instance simulée de l'interface "IFoo".
var foo = Mock.Create();
bool
isSetTo1 =
false
;
// Organisation : lorsque foo.Bar est défini sur 1, il doit changer "isSetTo1" en vrai.
Mock.ArrangeSet(() => { foo.Bar = 1; }).DoInstead(() => isSetTo1 =
true
);
// Agir
Foo.bar = 1; // ASSERT
]
Assert.IsTrue(isSetTo1);
}
La raison de ce changement de rupture est qu'une action ne peut pas fournir des informations sur le type de propriétaire dans tous les scénarios, et JustMock ne sait pas quel type il doit instrumenter. Ces informations peuvent être fournies à l'aide de la surcharge ArrangeSet
. Voici un exemple de retravail de l'exemple précédent :
NOI
bar_onsetto1_shouldnotifier ()
{
// Arranger
// // Création d'une instance simulée de l'interface "IFoo".
var foo = Mock.Create();
bool
isSetTo1 =
false
;
// Organisation : Indiquez le propriétaire du type de la propriété Bar .DoInstead(() => isSetTo1 =
true
);
// Act
foo. Barre = 1 ;
// Assert
Assert.IsTrue(isSetTo1);
[296] }