Je n'utilise pas Moq et je ne trouve pas le moyen de le faire. J'ai une méthode privée generateId, appeléMoq un proxy pour les tests unitaires
/// <summary>
/// Generates a call Id for external interfaces
/// </summary>
/// <returns></returns>
private string GenerateCallId()
{
return "EX" + SharedServicesClientProxy.Instance.GenerateId().ToString();
}
Je voulais tester l'unité de cette méthode, et pour cette raison j'ai besoin de se moquer de la procuration. SharedServicesClientProxy est juste un objet qui implémente l'interface ISharedServices mais ajoute le singleton. Je voulais tester que toutes les chaînes renvoyaient correctement une chaîne commençant par "EX". ceci est mon test unitaire, en utilisant Moq
/// <summary>
/// A test for GenerateCallId
/// A CallId for external systems should always start by "EX"
///</summary>
[TestMethod()]
[DeploymentItem("myDll.dll")]
public void GenerateCallIdTest()
{
myService_Accessor target = new myService_Accessor();
var SharedServicesClientProxy = new Mock<ISharedServices>();
SharedServicesClientProxy.Setup(x => x.GenerateId()).Returns(5396760556432785286);
string actual;
string extCallIdPrefix = "EX";
actual = target.GenerateCallId();
Assert.IsTrue(actual.StartsWith(extCallIdPrefix));
}
Je suppose que je fais ma maquette au mauvais endroit?
D'une manière plus générale, comment puis-je imbriquer un objet qui va être appelé par la méthode que je suis en train de tester? pour par exemple:
/// <summary>
/// dummy test
///</summary>
[TestMethod()]
[DeploymentItem("myDll.dll")]
public void Foo()
{
myService_Accessor target = new myService_Accessor();
boolexpected = false;
actual = target.Foo();
Assert.IsTrue(actual,expected);
}
/// <summary>
/// Foo
/// </summary>
/// <returns></returns>
private bool Foo()
{
return this.Bar();
}
Je dois moq Bar, mais où je ne dois le faire? Merci, Seb