Używam Moq sparowanego z interfejsem metod. Muszę przetestować, czy metody w tym interfejsie są wykonywane w określonej kolejności, a także pewna liczba razy dla każdego z nich.Czas i kolejność wykonywania metod makrotekcji
Interfejs
public interface IInterface
{
void MethodOne(string foo);
void MethodTwo(string foo);
}
Metoda
// MyClass stuff ...
public async Task Run()
{
MethodOne("foo");
MethodTwo("foo");
}
// ...
Testy
pisałem ten test, aby sprawdzić, które metody są wykonywane tylko pewną ilość razy (raz):
[TestMethod]
public async Task Test()
{
var mock = new Mock<IInterface>();
var mockSequence = new MockSequence();
var obj = new MyClass();
await obj.Run();
mock.Verify(i=> i.MethodOne("foo"), Times.Once());
mock.Verify(i=> i.MethodTwo("foo"), Times.Once());
}
To działa dobrze ...
Próbowałem już tych testów, aby ustalić, czy pewna sekwencja jest prawidłowo spełniona, ale test zdaje się zawsze mijać.
[TestMethod]
public async Task Test()
{
var mock = new Mock<IInterface>();
var mockSequence = new MockSequence();
var obj = new MyClass();
await obj.Run();
mock.InSequence(mockSequence).Setup(i => i.MethodOne("foo"));
mock.InSequence(mockSequence).Setup(i => i.MethodTwo("foo"));
}
powinien przejść, a nie ...
[TestMethod]
public async Task Test()
{
var mock = new Mock<IInterface>();
var mockSequence = new MockSequence();
var obj = new MyClass();
await obj.Run();
mock.InSequence(mockSequence).Setup(i => i.MethodTwo("foo")); // swapped order here
mock.InSequence(mockSequence).Setup(i => i.MethodOne("foo"));
}
Jeżeli nie przejdzie, ale nie ...
- Co muszę zrobić inaczej, aby zweryfikować właściwą kolejność jest spełniony ?
- Jak połączyć oba, aby sprawdzić liczbę czasów wykonania ORAZ odpowiednią sekwencję?
Oznaczyłem to jako duplikat, ponieważ dwa pytania wydają się odnosić do tego samego problemu. Jeśli nie, daj mi znać, a ja zagłosuję za ponownym otwarciem. – dcastro
Przeczytałem to pytanie, zanim zadałem to pytanie. To pytanie zostało rozwiązane z odpowiedzią, która mówi, że to błąd w Moq. To było 3 lata temu ... Zakładam, że to nie jest błąd. – kspearrin
Ponownie otworzyłem pytanie – dcastro