Вы должны использовать Func<Task>
вместо Action
:
[Test]
public void TestFail()
{
Func<Task> f = async () => { await Fail(); };
f.ShouldThrow<Exception>();
}
Это вызовет следующее расширение, которое используется для проверки асинхронных методов
public static ExceptionAssertions<TException> ShouldThrow<TException>(
this Func<Task> asyncAction, string because = "", params object[] becauseArgs)
where TException : Exception
Внутренне это метод выполнит задачу, возвращенную Func
, и дождитесь ее. Что-то вроде
try
{
Task.Run(asyncAction).Wait();
}
catch (Exception exception)
{
// get actual exception if it wrapped in AggregateException
}
Обратите внимание, что сам тест является синхронным.
Правильный способ сделать это выглядит следующим образом:
LIBS += -L/path/to -lpsapi
Таким образом, он будет работать на всех платформах, поддерживаемых Qt. Идея состоит в том, что вам нужно отделить каталог от имени библиотеки (без расширения и без префикса lib). Конечно, если вы включаете в себя конкретную версию Windows, это действительно не имеет значения.
Если вы хотите сохранить ваши файлы lib в каталоге проекта, вы можете ссылаться на них с помощью переменной $$_PRO_FILE_PWD_
, например:
LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
Если вы хотите развернуть свое приложение на компьютерах клиентов, а не использовать свое приложение только самостоятельно, мы обнаружим, что метод LIBS+= -Lxxx -lyyy
может привести к путанице, если не проблемы.
Мы разрабатываем приложения для Linux, Mac и Windows с использованием Qt. Мы поставляем полные автономные приложения. Поэтому все несистемные библиотеки должны быть включены в пакет развертывания. Мы хотим, чтобы наши клиенты могли запускать приложение с одного USB-накопителя для всех ОС. По соображениям совместимости с платформой USB-флешка должна быть отформатирована как FAT32, которая не поддерживает символические ссылки (Linux).
Мы обнаружили, что LIBS+= -Lxxx -lyyy
идиома слишком много черного ящика:
Итак, для нашего конкретного случая мы используем только абсолютные пути к файлу и проверить, существуют ли они. Мы удаляем все символические ссылки.
Сначала мы узнаем, какую операционную систему мы используем, и поместим ее в переменную CONFIG. И, например, для Linux 64bit, тогда:
linux64 {
LIBSSL= $$OPENSSLPATH/linux64/lib/libssl.a
!exists($$LIBSSL): error ("Not existing $$LIBSSL")
LIBS+= $$LIBSSL
LIBCRYPTO= $$OPENSSLPATH/linux64/lib/libcrypto.a
!exists($$LIBCRYPTO): error ("Not existing $$LIBCRYPTO")
LIBS+= $$LIBCRYPTO
}
Все зависимости могут быть скопированы в пакет развертывания, поскольку мы знаем их пути к файлам.
Используете ли вы проекты qmake
? Если это так, вы можете добавить внешнюю библиотеку, используя переменную LIBS
. Например:
win32:LIBS += path/to/Psapi.lib
LIBS + = C: \ Program Files \ OpenCV \ lib
blockquote>не будет работать, потому что вы используете пробелы в Program Files. В этом случае вам нужно добавить кавычки, поэтому результат будет выглядеть так: LIBS + = "C: \ Program Files \ OpenCV \ lib". Я рекомендую размещать библиотеки в небезопасных местах; -)
WINDIR = $$DIR
, WINDIR ~=s,/,\\,g
– adlag
19 August 2015 в 20:37
И добавить несколько файлов библиотеки, которые вы можете записать, как показано ниже:
INCLUDEPATH * = E: / DebugLibrary / VTK E: / DebugLibrary / VTK / Common E: / DebugLibrary / VTK / Фильтрация E: / DebugLibrary / VTK / GenericFiltering E: / DebugLibrary / VTK / Graphics E: / DebugLibrary / VTK / GUISupport / Qt E: / DebugLibrary / VTK / Hybrid E: / DebugLibrary / VTK / Imaging E: / DebugLibrary / VTK / IO E: / DebugLibrary / VTK / Parallel E: / DebugLibrary / VTK / Rendering E: / DebugLibrary / VTK / Утилиты E: / DebugLibrary / VTK / VolumeRendering E: / DebugLibrary / VTK / Widgets E: / DebugLibrary / VTK / Wrapping
LIBS * = -LE: / DebugLibrary / VTKBin / bin / release -lvtkCommon -lvtksys -lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkzpat - lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering
blockquote>
Ошибка, о которой вы говорите, связана с отсутствием дополнительного пути включения. Попробуйте добавить его с помощью: INCLUDEPATH + = C: \ path \ to \ include \ files \ Надеемся, что это сработает. С уважением.
Я хотел бы добавить для полноты, что вы также можете добавить только БИБЛИОТЕЧНУЮ ПУТЬ, где он будет искать зависимую библиотеку (которая не может быть напрямую указана в вашем коде, но вам может понадобиться библиотека, которую вы используете).
Для сравнения это соответствовало бы тому, что делает среда LIBPATH, но ее вид неясен в Qt Creator и недостаточно хорошо документирован.
Как я это сделал:
LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"
По сути, если вы не указали фактическое имя библиотеки, оно добавляет путь к тому, где он будет искать библиотеки, зависящие от поиска. Разница в синтаксисе небольшая, но это очень полезно для предоставления только PATH, где искать зависимые библиотеки. Это когда-то просто боль, чтобы предоставить каждому пути отдельную библиотеку, где вы знаете, что все они в определенной папке, и Qt Creator подберет их.
qmake -tp vc
, я не нахожу имен libs вAdditional Dependencies
проекта, но проект vs выполняется хорошо. Означает ли это, что есть некоторые другие способы добавленияAdditional Dependencies
в vs? – Summer Sun 19 September 2017 в 01:59LIBS += -lGdi32
. – Dan Korn 2 April 2018 в 16:45