Soru Genel yöntemleri alay etme


Genel bir yöntemle ve hiçbir parametresi olmayan bir arayüze sahip olduğumu varsayın:

public interface Interface {
   void Method<T>();
}

Şimdi bu sınıf için alay uygulamak istiyorum (kullanıyorum Moq) ve bazı somut tipler için bu yöntemle dalga geçmek istiyorum - alay edeyim Method<String>() çağırır.

mock = new Mock<Interface>();
mock.Setup(x => x.Method ????).Returns(String("abc"));

In fikri ???? açık olmalı - bu lambda ifadesi ne zaman davayı ele almalı T içinde Method<T> aslında bir String.

İstenen davranışa ulaşmamın bir yolu var mı?


18
2017-12-10 11:39


Menşei




Cevaplar:


basitçe:

mock.Setup(x => x.Method<string>()).Returns("abc");

Ayrıca, yönteminizin şu anda dönüş tipi olarak tanımlandığı gibi bir şey döndürdüğünden emin olun. void:

public interface Interface
{
    string Method<T>();
}

class Program
{
    static void Main()
    {
        var mock = new Mock<Interface>();
        mock.Setup(x => x.Method<string>()).Returns("abc");

        Console.WriteLine(mock.Object.Method<string>()); // prints abc
        Console.WriteLine(mock.Object.Method<int>()); // prints nothing
    }
}

20
2017-12-10 11:43



olmamalı string Method<T> olmak T Method<T>? - Scott
@Secret Ajan Adam, hayır, yapmamalı. En azından bunu yapmak zorunda olan hiçbir şey yok. Bu sadece benim aldığım bir örnekti. Bir yöntem ne istersen onu geri verebilir. Eğer isterseniz, string ile dönüş tipi T, örnek hala işe yarayacak. - Darin Dimitrov


Ben kendimi kullanmadım ama beklerdim:

mock.Setup(x => x.Method<string>());

(Örnek yönteminizin geçersiz bir dönüş türüne sahip olduğunu unutmayın, bu nedenle hiçbir şey iade edilmemelidir ...


5
2017-12-10 11:43



Sahte, gevşek modda oluşturulduğu için kurulum gerekli değildir. - Nate Zaugg