public IEnumerable <ITestInfo> Discover(string source) { if (source == null) { throw new ArgumentNullException(nameof(source)); } var assembly = _reflection.LoadAssembly(source); return (from type in assembly.DefinedTypes from typeGenericArgs in _genericArgsProvider.GetGenericArgs(type).DefaultIfEmpty(Enumerable.Empty <Type>()) let typeGenericArgsArray = typeGenericArgs.ToArray() let caseType = DefineType(type, typeGenericArgsArray) from typeArgs in _argsProvider.GetTypeParameters(type).DefaultIfEmpty(Enumerable.Empty <object>()) from method in caseType.Methods from methodGenericArgs in _genericArgsProvider.GetGenericArgs(method).DefaultIfEmpty(Enumerable.Empty <Type>()) let methodGenericArgsArray = methodGenericArgs.ToArray() let caseMethod = DefineMethod(method, methodGenericArgsArray) where _attributeAccessor.GetAttributes(caseMethod, _attributeMap.GetDescriptor(Wellknown.Attributes.Test)).Any() from methodArgs in _argsProvider.GetMethodParameters(caseMethod).DefaultIfEmpty(Enumerable.Empty <object>()) from testCase in CreateTestInfo(source, assembly, caseType, typeGenericArgsArray, typeArgs, caseMethod, methodGenericArgsArray, methodArgs) select testCase); }