내가 만드는 Windows Forms 응용 프로그램에 문제가 있습니다. 응용 프로그램은 통합 테스트 응용 프로그램으로 간주됩니다. 본질적으로, 그것은 내 수업 중 하나에서 많은 웹 서비스를 이용하는 메소드를 테스트하기로되어 있습니다. 난 반사를 통해 테스트 할 클래스의 방법을로드하고,이 같은 일을 오전 :이 웹 서비스와 장소를 테스트하기 위해 생성 된 클래스에서 메소드의 목록을 반환ListBox에서 선택한 메서드 호출
private List<string> GetMethods(Type type)
{
return (from method in type.GetMethods() where method.IsPublic &&
method.ReturnType == typeof(void) select method.Name).ToList();
}
ListBox에서 사용자가 원하는만큼 많은 메서드를 선택할 수 있습니다. 내 혼란이 여기에옵니다. 내가하고 싶은 것은 사용자가 선택한 메소드를 얻고 해당 메소드 X 번을 실행하는 것입니다 (폼에 메소드를 실행하는 횟수를 입력하는 텍스트 상자가 있습니다). 리플렉션을 통해 얻은 메서드 이름을 기반으로 이러한 메서드를 실행하는 방법을 파악할 수 없습니다. 나는 이런 식으로 뭔가를 시도했습니다,하지만 난 그게 옳지 않아 아는이도 컴파일되지 않습니다
private void RunMethods(Type type)
{
var tester = new ClassToTest();
foreach(var item in lstMethodList.SelectedItems)
{
foreach(var method in type.GetMethods())
{
if(String.Equals(item.ToString(), method.Name))
{
ThreadStart ts = new ThreadStart(method.Name);
Thread thread1 = new Thread(ts);
thread1.Start();
}
}
}
}
하는 ThreadStart 매개 변수로 메서드 이름을 필요로한다. 이것이 가능한 방법이 있습니까? 어쩌면 논리적으로 잘못 될 것 같지만, 사용자가 지정하는 여러 번 실행하고 실행해야하는 각 메소드에 대한 스레드를 만들고 싶습니다. 이것은 웹 서비스가 처리 할 수있는 것을보기 위해 일부로드 테스트와 함께 통합 테스트를 수행하는 방법으로되어 있습니다.
Google로 검색하는 것이 도움이되지 않았습니까? http://www.codeproject.com/KB/cs/C__Reflection_Tutorial.aspx – Zenwalker
정적 또는 인스턴스 메서드라고 부르는 메서드가 있습니까? –
그들은 모두 호출하려고하는 인스턴스 메서드입니다. 나는 내가 잘못하고 있다고 생각하기 시작했다. 왜냐하면 나는 메소드를 얻는 클래스가 내가 테스트하기를 원하는 클래스 인 _tests_ 클래스이기 때문이다 ... 그래서 아마도 나는 클래스 자체 테스트해야합니다. – Zajn