.rspec
в корне вашего проекта Добавьте путь к вашей спецификации, например
--default-path test/spec/
Добавьте шаблон имен файлов, например,
--pattern ****/*.spec
rspec
, и он должен выбрать все ваши спецификации и запустить их:) default-path
и pattern
просто команды строковые аргументы, что означает, что вы также можете добавить любой другой аргумент командной строки, который принимает rspec (можно запустить rspec --help
, чтобы увидеть доступные опции)
Согласно https://www.relishapp.com/ rspec / rspec-core / v / 2-0 / docs / configuration / read-command-line-configuration-options-from-files вы также можете поместить параметры в ~/.rspec
, что сделает их доступными глобально. , Локальные параметры файла .rspec
переопределяют глобальные параметры.
Фактически у вас не может быть экземпляра определения универсального типа. Следовательно, метод IsAssignableFrom () работает должным образом. Чтобы добиться желаемого, сделайте следующее:
public bool IsGenericList(Type type)
{
if (type == null) {
throw new ArgumentNullException("type");
}
foreach (Type @interface in type.GetInterfaces()) {
if (@interface.IsGenericType) {
if (@interface.GetGenericTypeDefinition() == typeof(ICollection<>)) {
// if needed, you can also return the type used as generic argument
return true;
}
}
}
return false;
}
Просто из любопытства, для чего вам это нужно?
У Люсеро и Рида Копси есть правильное решение. Чтобы сделать его более кратким, вот он в форме LINQified:
var isGenericList = type.GetInterfaces().Any(t => t.IsGenericType &&
t.GetGenericTypeDefinition() == typeof(IList<>));
Используя это: http://msdn.microsoft.com/en-us/library/system.type.findinterfaces.aspx
Я пробовал это:
public class Test : IList<string>
{
//implementation left out...
}
class Program
{
static void Main(string[] args)
{
Test t = new Test();
TypeFilter myFilter = new TypeFilter(MyInterfaceFilter);
Type type = t.GetType();
Type[] x = type.FindInterfaces(myFilter, "System.Collections.Generic.IList");
Console.WriteLine(x.Length);
}
public static bool MyInterfaceFilter(Type typeObj, Object criteriaObj)
{
if (typeObj.ToString().Contains(criteriaObj.ToString()))
return true;
else
return false;
}
}
Тест пройден ...
public static bool IsGenericList( Type type )
{
return type.Name == "IList`1" || type.GetInterface( "IList`1" ) != null;
}
Вы пробовали вызвать Type.GetInterface () ? Это не совсем понятно из справки, но я думаю, что он будет искать интерфейсы, реализованные базовыми типами, помимо самого типа. Если нет, вы всегда можете пройти через Type.BaseType
и снова вызвать GetInterface ()
.
Используйте оператор « is »:
Оператор is используется для проверки является ли тип времени выполнения объекта совместим с заданным типом.