BeginInvoke bir Eylem yönteminde sınamak için bir yöntem arıyorum, çünkü yöntem bir arka plan iş parçacığı üzerinde çalıştığı için gerçekten ne zaman tamamladığını veya geri arama yöntemini çağırdığını bilmenin bir yolu yoktur. Testlerimi beklemeden önce, geri çekilmeden önce testimi bekletmenin bir yolunu arıyorum.Birim Test Nasıl Yapılır StartInvoke bir eylem üzerinde
Aşağıdaki Presenter sınıfında, veri getirildiğinde görünümü güncelleyen arka plan iş parçacığı üzerinde PopulateView öğesini çalıştırdığımı fark edebilirsiniz ve ben Görünüm Özellikleri'nin doğru şekilde başlatıldığını iddia ediyorum.
NUnit ve Moq kullanıyorum.
public class Presenter
{
private IView _view;
private IService _service;
public Presenter(IView view, IService service)
{
_view = view;
_service = service;
Action action = PopulateView;
action.BeginInvoke(PopulateViewCallback, action);
}
private void PopulateViewCallback(IAsyncResult ar)
{
try
{
Action target = (Action)ar.AsyncState;
target.EndInvoke(ar);
}
catch (Exception ex)
{
Logger.Instance.LogException("Failed to initialize view", ex);
}
}
private void PopulateView()
{
Thread.Sleep(2000); // Fetch data _service.DoSomeThing()
_view.Property1 = "xyz";
}
}
yapmak için kodunuzu yeniden kodlamak zorundasınız, bu konuda iyi düşünmüş ve bunu yeni kod için kullanabilir, ancak birim doğrudan BeginInvoke olarak adlandırılan mevcut kodu test edebilir. – skjagini
Refactor? Orada bağımlılık var; Üniteyi test etmenin tek yolu ya soyutlamak ya da test etmemek. =/ – Tejs
'callback' parametresinin AsyncCallback türünde olması gerekir. Ama teşekkür ederim, bu harika :) – soniiic