Ne denir ilk kez bir istisna durumu bir yöntem alay etmek Moq kullanmak en özlü bir yoldur, o zaman başarılı ikinci kez başarılı o denir?Moq: Kur ilk çağrı başarısız bir alay yöntem ikinci
cevap
Ben Callback
faydalanmak ve Callback
içinden bir istisna edilip edilmeyeceğini belirlemek için bir sayacını artırmak olacaktır.
[Test]
public void TestMe()
{
var count = 0;
var mock = new Mock<IMyClass>();
mock.Setup(a => a.MyMethod()).Callback(() =>
{
count++;
if(count == 1)
throw new ApplicationException();
});
Assert.Throws(typeof(ApplicationException),() => mock.Object.MyMethod());
Assert.DoesNotThrow(() => mock.Object.MyMethod());
}
public interface IMyClass
{
void MyMethod();
}
Bu iyi bir cevaptır ve 2'den fazla şeyin olmasını istediğinizde bu yaklaşım tercih edilir. – anthony
Bu yaklaşım güzel, ama @Mathias' cevabını Phil Haack tarafından söz konusu yayını kontrol hangi basittir. Oldukça kaygan. Eğer reader.Setup (r => r.Read()) 'gibi bir şey yapabilirsiniz bir uzantısı yöntemi kullanarak ReturnsInOrder (doğru, doğru, yanlış);. Eğer bir değerler dizisi dönmek istiyorsanız' – rsbarro
ReturnsInOrder() güzel ama Sıralamanın bir parçası olarak bir istisna atmak için nasıl kullanılacağı kolayca anlaşılmadı. – anthony
Ben şimdiye kadar ile geldim en iyi şudur:
interface IFoo
{
void Bar();
}
[Test]
public void TestBarExceptionThenSuccess()
{
var repository = new MockRepository(MockBehavior.Default);
var mock = repository.Create<IFoo>();
mock.Setup(m => m.Bar()).
Callback(() => mock.Setup(m => m.Bar())). // Setup() replaces the initial one
Throws<Exception>(); // throw an exception the first time
...
}
+ 1 Bu harika bir yaklaşım. Sadece orada olanlara kodun içine karışmış biri için net olmayabilir. – rsbarro
Parlak. Bu benim için harika çalıştı. –
Güzel olan, bunu düşünmedim! tarihi üzerinden sahte mendil değiştirilmesi yapamayacağı böylece –
Phil Haack belli bir sonuç dizisi dönmek için bir yöntem kurma hakkında ilginç blog post sahiptir. Bazı işler çünkü bunun, belirli türde bir değerler dizisi, yer ile o iyi bir başlangıç noktası olacağını görünüyor Tür T veya bir istisna olabilir sonuçlarının bir dizilişe sahip olduğu şimdi gerekir. (@RichardBarnett yorum tarafından belirtildiği gibi) sadece yerleşik bir yöntem SetupSequence()
kullanabilirsiniz MOQ 4.2 ile başlayarak
ilginç bir okuma, teşekkürler. – anthony
.
Örnek:
var mock = new Mock<IMyClass>();
mock.SetupSequence(x => x.MyMethod("param1"))
.Throws<MyException>()
.Returns("test return");
- 1. Moq - Yöntem Tepki alay değer
- 2. Moq ile alay listesi dönen nesne alay
- 3. Nasıl Microsoft.Office.Interop.Excel.Range Moq ile alay?
- 4. Bir alay ilk kez bir istisna atar ve ikinci bir değer döndürür nasıl
- 5. MOQ
- 6. Moq
- 7. Numaralandırılabilir yöntem için Moq kullanmaya çalışan Newbie
- 8. Moq ile alay yönteminin bir çağırma parametresini nasıl değiştirebilirim?
- 9. C# jenerik yöntem çözünürlüğü belirsiz bir çağrı hatası ile başarısız
- 10. Moq kullanılarak bir yöntem çağrıldığında bir olayı nasıl artırırım?
- 11. Moq Kurulumu çalışmıyor, özgün yöntem hala
- 12. alay korumalı yöntem
- 13. Adedi te koruma sanal (non-generic) yöntemini alay etmek MOQ
- 14. Moq kullanarak bir yöntem çağrısı doğrulayın
- 15. - Moq
- 16. Bir alayla alay konusu olan alay
- 17. Test için bir yöntem alay a
- 18. Moq
- 19. ServiceStack ISession'ı Moq ve StructureMap kullanarak nasıl alay ediyorsunuz?
- 20. Çağrı yardımcı yöntem aşağıdaki AJAX çağrı var
- 21. Moq Yöntem kurulumunda Dizi/IEnumerable parametreleri
- 22. Kur içinde Sqlite
- 23. Moq nesne parametresiyle doğrulayın
- 24. Ninject'in MockingKernel (moq) ile alay kurulumları nasıl yapılır
- 25. Farklı parametreler için bir yöntem iki kez nasıl sahte ile alay
- 26. Deneyimlerim moq with vB.Net
- 27. JavaFX düğmesi ikinci tıklamada ilk tıklama değil İlk
- 28. Herhangi bir yöntemle alay etmeden phpunit'te bir alay oluşturma?
- 29. Sanal üyeler alaylı Moq
- 30. CAL EventAggregator'ı Moq ile eşleştiriyor
MOQ 4.2 ve daha yüksek artık SetupSequence 'ile bu destekler()'. –