Taklit:aşağıdaki taklit hakkında gitmek nasıl bir genel yöntem FakeItEasy
sahte basitçe herhangi bir değişiklik olmadan argüman var dönmek için ne isterimpublic interface IBlah
{
Func<T, bool> ApplyFilter<T>(Func<T, bool> predicate) where T:IMessage;
}
. Ancak, sahte bir kez tam olarak çağrıldığını doğrulamak istiyorum. aracılığıyla bir geçiş olarak hareket
public class Something
{
public Something(IBlah blah) { _blah = blah; }
public bool DoSomething(SomeValue m, Func<SomeValue, bool> predicate)
{
Func<SomeValue, bool> handler = _blah.ApplyFilter(predicate);
return handler(m);
}
}
yani sahte ihtiyaçlarını ama aynı zamanda kullanılır oldu doğrulamak gerekiyor: Bir kullanım örneği aşağıda verilmiştir.
Bu konuda gitmenin en iyi yolu nedir?
[orada yorganın altında oluyor bir çok şey, ama yukarıdaki örnekte için aşağı basitleştirdik ... yapmacık örnek dert etmeyin.]
en az bir kez kullanılan, veya tam olarak bir kez kullanılır, bu en fazla bir kez kullanıldığını doğrulamak istiyor musunuz? Bu şartı yerine getirmezse ne olur? Bu arabirimin bir "numInvocations" özelliği var mı? Bunu, bir kez daha * yeterli * olarak adlandıramayacağınızı, ancak çağrılmadığınızı bildiğinizden emin olabilirsiniz. Geri bildirim sağlamanın bir yoluna ihtiyacınız var. – Servy
İlgili jenerikler dahil olmak üzere, var fake = A.Fake(); A.CallTo (() ==> fake.SomeMethod (A ._)) .ReturnsLazily (x => x.GetArgument (0)); .... A.CallTo (sahte) .MustHaveHappened (Repeated.Exactly.Once); Aynı şeyi Func jenerik varlığında nasıl yapılacağını anlayamıyorum. Arayüzün bir Dummy uygulaması oluşturmayı denedim ve bu geçişi yapabildi, ancak bu somut olduğundan, FakeItEasy kullanıldığını doğrulayamıyor. –
ashic
Yani, bir kez tam olarak gerçekleştiğinden emin olmanız gerektiğinden, iki özellik olan NumInvokations' ve bu işleve sahip bir sınıf döndürme yöntemini isteyeceksiniz. İşlevi başka bir yere aktarın, sonra 'NumInvokations' öğesinin bire eşit olup olmadığını belirleyin. – Servy