У меня была эта точная проблема при разработке приложения Spring Boot в STS, но в конечном итоге развертывание упакованной войны в WebSphere (v.9). Основываясь на предыдущих ответах, моя ситуация была уникальной. ojdbc8.jar был в моей папке WEB-INF / lib с установленным набором родительского последнего класса, но всегда говорит, что не удалось найти подходящий драйвер.
Моя последняя проблема заключалась в том, что я использовал неправильный класс DataSource потому что я просто следил за онлайн-учебниками / примерами. Нашел подсказку благодаря тому, что Дэвид Дай прокомментировал свой собственный вопрос: Spring JDBC Не удалось загрузить класс драйвера JDBC [oracle.jdbc.driver.OracleDriver]
Также позже был найден весенний гуру пример с конкретным драйвером Oracle: https://springframework.guru/configuring-spring-boot-for-oracle/
Пример, который вызывает ошибку, используя org.springframework.jdbc.datasource.DriverManagerDataSource
на основе общих примеров .
@Config
@EnableTransactionManagement
public class appDataConfig {
\* Other Bean Defs *\
@Bean
public DataSource dataSource() {
// configure and return the necessary JDBC DataSource
DriverManagerDataSource dataSource = new DriverManagerDataSource("jdbc:oracle:thin:@//HOST:PORT/SID", "user", "password");
dataSource.setSchema("MY_SCHEMA");
return dataSource;
}
}
И исправленный exapmle с использованием oracle.jdbc.pool.OracleDataSource
:
@Config
@EnableTransactionManagement
public class appDataConfig {
/* Other Bean Defs */
@Bean
public DataSource dataSource() {
// configure and return the necessary JDBC DataSource
OracleDataSource datasource = null;
try {
datasource = new OracleDataSource();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
datasource.setURL("jdbc:oracle:thin:@//HOST:PORT/SID");
datasource.setUser("user");
datasource.setPassword("password");
return datasource;
}
}
Эта страница может помочь, она рассматривает довольно много платформ модульного теста C++:
CPPUnitLite или CPPUnitLite2.
CPPUnitLite был создан Michael Feathers, который первоначально портировал JUnit Java к C++ как CPPUnit (попытки CPPUnit подражают модели разработки JUnit - но C++ испытывает недостаток в функциях Java [например, отражение], чтобы облегчить использовать).
CPPUnitLite пытается сделать истинную среду тестирования в стиле С++, не Java один портированный к C++. (Я перефразирую от Растушевки Работа Эффективно с Унаследованным кодом книга). CPPUnitLite2, кажется, другая перезапись с большим количеством функций и исправлений ошибок.
я также просто споткнулся через [1 131] UnitTest ++ , который включает материал от CPPUnitLite2 и некоторой другой платформы.
Microsoft выпустила WinUnit.
Лично, я предпочитаю WinUnit, так как он не требует меня к запись ничто за исключением моих тестов (я создаю .dll как тест, не exe). Я просто разрабатываю проект и указываю на WinUnit.exe на мой тестовый выходной каталог, и он выполняет все, что он находит. Вы можете загружать проект WinUnit здесь . (MSDN теперь требует, чтобы Вы загрузили всю проблему, не статью. WinUnit включен в.)
Платформа, включенная с VS9 , .NET, но Вы можете тесты записи в C++ / CLI, поэтому, пока Вы - удобное изучение некоторых измов.NET, необходимо быть в состоянии протестировать большую часть любого кода C++.
boost.test и googletest надеются быть довольно подобным, но адаптированный к немного отличающемуся использованию. Оба из них имеют двоичный компонент, таким образом, Вам будет нужен дополнительный проект в Вашем решении скомпилировать и запустить тесты.
платформа, которую мы используем, CxxTest, который намного легче; это - заголовки только и использует сценарий Perl (!) для очистки информации о наборе тестов от заголовков (комплекты наследовались CxxTest:: Основа, имена всех Ваших методов тестирования запускаются с "теста"). Очевидно, это требует, чтобы Вы получили Perl от один источник или другой , который добавляет наверху к Вашей установке среды сборки.
Я использую UnitTest ++ .
В годах, так как я сделал это сообщение, которое источник переместил от SourceForge до GitHub. Также учебное руководство в качестве примера является теперь большим количеством агностика - не входит ни в какую конфигурацию или проект, настроенный вообще.
я сомневаюсь, что это будет все еще работать на Visual Studio 6, поскольку файлы проекта теперь создаются через CMake. При тихой необходимости в более старой поддержке версии, можно получить последнюю доступную версию под ответвление SourceForge.
Я использовал CppUnit с VS2005 и Eclipse. Wiki очень полна (особенно, если Вы знакомы с JUnit).
Я не на 100% уверен в VS2008, но я знаю, что платформа Поблочного тестирования, что Microsoft, поставленная в VS2005 как часть их Комплекта Команды, была только для.NET, не C++
, я использовал CppUnit также, и это было в порядке. Почти такой же как NUnit/JUnit/so на.
, Если Вы использовали повышение, у них также есть библиотека поблочного тестирования
, парни позади повышения имеют [приблизительно 115] серьезные блоки кода, таким образом, я сказал бы, что их платформа должна быть довольно хорошей, но это не мог бы быть самый удобный для пользователя:-)
Мне нравится CxxTest также по тем же причинам. Это - заголовочный файл только так никакое требуемое соединение. Вы не застреваете с Perl, поскольку существует бегун Python также. Я буду рассматривать библиотеку Google скоро. Материал Повышения вытягивает в слишком большом количестве другого багажа.
Тестер единицы для Visual Studio 2008 только для кода.NET, насколько я знаю.
я использовал CppUnit на Visual Studio 2005 и найденный им, чтобы быть довольно хорошим.
, Насколько я помню, установка была относительно безболезненной. Просто удостоверьтесь, что в Вашем тестировании предполагает, что компоновщик (Компоновщик в †’ Вход в †’ Дополнительные Зависимости) включает cppunitd.lib.
Затем #include <cppunit/extensions/HelperMacros.h>
в Вашем заголовке.
можно тогда выполнить шаги в http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html для получения тестовой работы класса.
Существует способ тестирования неуправляемого C ++ с использованием встроенной среды тестирования в Visual Studio 2008 . Если вы создаете тестовый проект C ++, используя C ++ / CLI, вы можете делать вызовы неуправляемой DLL. Вам придется переключить поддержку Common Language Runtime на / clr из / clr: safe, если вы хотите протестировать код, написанный на неуправляемом C ++.
У меня есть пошаговые подробности в моем блоге здесь: http: //msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/
Все упомянутые здесь инструменты являются инструментами командной строки. Если вы ищете более интегрированное решение, обратите внимание на cfix studio , который представляет собой надстройку Visual Studio для модульного тестирования C / C ++. Он очень похож на TestDriven.Net, но для (неуправляемого) C / C ++, а не для .NET.
Вот подход, который я использую для тестирования модуля IIS URL Rewrite в Microsoft (он основан на командной строке, но должен работать и для VS):
Вот пример:
// Example
#include "stdafx.h"
#include "mstest.h"
// Following code is native code.
#pragma unmanaged
void AddTwoNumbersTest() {
// Arrange
Adder yourNativeObject;
int expected = 3;
int actual;
// Act
actual = yourNativeObject.Add(1, 2);
// Assert
Assert::AreEqual(expected, actual, L"1 + 2 != 3");
}
// Following code is C++/CLI (Managed)
#pragma managed
using namespace Microsoft::VisualStudio::TestTools::UnitTesting;
[TestClass]
public ref class TestShim {
public:
[TestMethod]
void AddTwoNumbersTest() {
// Just jump to C++ native code (above)
::AddTwoNumbersTest();
}
};
При таком подходе люди не «Не нужно изучать слишком много материала C ++ / CLI, весь реальный тест будет выполняться на собственном языке C ++, а класс TestShim будет использоваться для« публикации »теста в MSTest.exe (или для его отображения).
Для добавляя новые тесты, вы просто объявляете новый метод [TestMethod] void NewTest () {:: NewTest ();} и новую нативную функцию void NewTest (). Никаких макросов, никаких трюков, все просто.
Теперь файл заголовка необязателен, но его можно использовать для предоставления методов класса Assert с собственными сигнатурами C ++ (например, wchar_t * вместо Stirng ^), так что вы можете держите его ближе к C ++ и подальше от C ++ / CLI:
Вот пример:
// Example
#pragma once
#pragma managed(push, on)
using namespace System;
class Assert {
public:
static void AreEqual(int expected, int actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
static void AreEqual(int expected, int actual, PCWSTR pszMessage) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual, gcnew String(pszMe
ssage));
}
template<typename T>
static void AreEqual(T expected, T actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
// Etcetera, other overloads...
}
#pragma managed(pop)
HTH
dllВот пример:
// Example
#include "stdafx.h"
#include "mstest.h"
// Following code is native code.
#pragma unmanaged
void AddTwoNumbersTest() {
// Arrange
Adder yourNativeObject;
int expected = 3;
int actual;
// Act
actual = yourNativeObject.Add(1, 2);
// Assert
Assert::AreEqual(expected, actual, L"1 + 2 != 3");
}
// Following code is C++/CLI (Managed)
#pragma managed
using namespace Microsoft::VisualStudio::TestTools::UnitTesting;
[TestClass]
public ref class TestShim {
public:
[TestMethod]
void AddTwoNumbersTest() {
// Just jump to C++ native code (above)
::AddTwoNumbersTest();
}
};
При таком подходе люди не придется слишком много изучать C ++ / CLI, весь настоящий тест будет выполняться на собственном языке C ++, а класс TestShim будет использоваться для «публикации» теста в MSTest.exe (или для того, чтобы сделать его видимым).
Для добавления новых тесты, вы просто объявляете новый метод [TestMethod] void NewTest () {:: NewTest ();} и новую нативную функцию void NewTest (). Никаких макросов, никаких уловок, все просто.
Теперь файл заголовка является необязательным, но его можно использовать для предоставления методов класса Assert с собственными сигнатурами C ++ (например, wchar_t * вместо Stirng ^), так что вы можете держите его ближе к C ++ и подальше от C ++ / CLI:
Вот пример:
// Example
#pragma once
#pragma managed(push, on)
using namespace System;
class Assert {
public:
static void AreEqual(int expected, int actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
static void AreEqual(int expected, int actual, PCWSTR pszMessage) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual, gcnew String(pszMe
ssage));
}
template<typename T>
static void AreEqual(T expected, T actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
// Etcetera, other overloads...
}
#pragma managed(pop)
HTH
dllВот пример:
// Example
#include "stdafx.h"
#include "mstest.h"
// Following code is native code.
#pragma unmanaged
void AddTwoNumbersTest() {
// Arrange
Adder yourNativeObject;
int expected = 3;
int actual;
// Act
actual = yourNativeObject.Add(1, 2);
// Assert
Assert::AreEqual(expected, actual, L"1 + 2 != 3");
}
// Following code is C++/CLI (Managed)
#pragma managed
using namespace Microsoft::VisualStudio::TestTools::UnitTesting;
[TestClass]
public ref class TestShim {
public:
[TestMethod]
void AddTwoNumbersTest() {
// Just jump to C++ native code (above)
::AddTwoNumbersTest();
}
};
При таком подходе люди не придется слишком много изучать C ++ / CLI, весь реальный тест будет выполняться на собственном языке C ++, а класс TestShim будет использоваться для «публикации» теста в MSTest.exe (или для того, чтобы сделать его видимым).
Для добавления новых тесты, вы просто объявляете новый метод [TestMethod] void NewTest () {:: NewTest ();} и новую нативную функцию void NewTest (). Никаких макросов, никаких уловок, все просто.
Теперь файл заголовка является необязательным, но его можно использовать для предоставления методов класса Assert с собственными сигнатурами C ++ (например, wchar_t * вместо Stirng ^), так что вы можете держите его ближе к C ++ и подальше от C ++ / CLI:
Вот пример:
// Example
#pragma once
#pragma managed(push, on)
using namespace System;
class Assert {
public:
static void AreEqual(int expected, int actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
static void AreEqual(int expected, int actual, PCWSTR pszMessage) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual, gcnew String(pszMe
ssage));
}
template<typename T>
static void AreEqual(T expected, T actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
// Etcetera, other overloads...
}
#pragma managed(pop)
HTH
Вот пример:
// Example
#include "stdafx.h"
#include "mstest.h"
// Following code is native code.
#pragma unmanaged
void AddTwoNumbersTest() {
// Arrange
Adder yourNativeObject;
int expected = 3;
int actual;
// Act
actual = yourNativeObject.Add(1, 2);
// Assert
Assert::AreEqual(expected, actual, L"1 + 2 != 3");
}
// Following code is C++/CLI (Managed)
#pragma managed
using namespace Microsoft::VisualStudio::TestTools::UnitTesting;
[TestClass]
public ref class TestShim {
public:
[TestMethod]
void AddTwoNumbersTest() {
// Just jump to C++ native code (above)
::AddTwoNumbersTest();
}
};
При таком подходе людям не нужно изучать слишком много вещей C ++ / CLI, весь настоящий тест будет проводиться на нативном языке C ++, а класс TestShim будет использоваться для «публикации» тест в MSTest.exe (или сделать его видимым).
Для добавления новых тестов вы просто объявляете новый метод [TestMethod] void NewTest () {:: NewTest ();} и новую нативную функцию void NewTest () . Никаких макросов, никаких трюков, все просто.
Теперь файл заголовка необязателен, но его можно использовать для предоставления методов класса Assert с собственными сигнатурами C ++ (например, wchar_t * вместо Stirng ^), так что вы можете держите его ближе к C ++ и подальше от C ++ / CLI:
Вот пример:
// Example
#pragma once
#pragma managed(push, on)
using namespace System;
class Assert {
public:
static void AreEqual(int expected, int actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
static void AreEqual(int expected, int actual, PCWSTR pszMessage) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual, gcnew String(pszMe
ssage));
}
template<typename T>
static void AreEqual(T expected, T actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
// Etcetera, other overloads...
}
#pragma managed(pop)
HTH
Вот пример:
// Example
#include "stdafx.h"
#include "mstest.h"
// Following code is native code.
#pragma unmanaged
void AddTwoNumbersTest() {
// Arrange
Adder yourNativeObject;
int expected = 3;
int actual;
// Act
actual = yourNativeObject.Add(1, 2);
// Assert
Assert::AreEqual(expected, actual, L"1 + 2 != 3");
}
// Following code is C++/CLI (Managed)
#pragma managed
using namespace Microsoft::VisualStudio::TestTools::UnitTesting;
[TestClass]
public ref class TestShim {
public:
[TestMethod]
void AddTwoNumbersTest() {
// Just jump to C++ native code (above)
::AddTwoNumbersTest();
}
};
При таком подходе людям не нужно изучать слишком много вещей C ++ / CLI, весь настоящий тест будет проводиться на нативном языке C ++, а класс TestShim будет использоваться для «публикации» тест в MSTest.exe (или сделать его видимым).
Для добавления новых тестов вы просто объявляете новый метод [TestMethod] void NewTest () {:: NewTest ();} и новую нативную функцию void NewTest () . Никаких макросов, никаких трюков, все просто.
Теперь файл заголовка необязателен, но его можно использовать для предоставления методов класса Assert с собственными сигнатурами C ++ (например, wchar_t * вместо Stirng ^), так что вы можете держите его ближе к C ++ и подальше от C ++ / CLI:
Вот пример:
// Example
#pragma once
#pragma managed(push, on)
using namespace System;
class Assert {
public:
static void AreEqual(int expected, int actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
static void AreEqual(int expected, int actual, PCWSTR pszMessage) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual, gcnew String(pszMe
ssage));
}
template<typename T>
static void AreEqual(T expected, T actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
// Etcetera, other overloads...
}
#pragma managed(pop)
HTH
весь реальный тест будет выполнен на языке C ++, а класс TestShim будет использоваться для «публикации» теста в MSTest.exe (или сделать его видимым).Для добавления новых тестов вы просто объявляете новый [TestMethod] void NewTest () {:: NewTest ();} и новая нативная функция void NewTest (). Никаких макросов, никаких уловок, все просто.
Теперь файл заголовка является необязательным, но его можно использовать для предоставления методов класса Assert с собственными сигнатурами C ++ (например, wchar_t * вместо Stirng ^), так что вы можете держите его ближе к C ++ и подальше от C ++ / CLI:
Вот пример:
// Example
#pragma once
#pragma managed(push, on)
using namespace System;
class Assert {
public:
static void AreEqual(int expected, int actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
static void AreEqual(int expected, int actual, PCWSTR pszMessage) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual, gcnew String(pszMe
ssage));
}
template<typename T>
static void AreEqual(T expected, T actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
// Etcetera, other overloads...
}
#pragma managed(pop)
HTH
весь реальный тест будет выполнен на языке C ++, а класс TestShim будет использоваться для «публикации» теста в MSTest.exe (или для его отображения).Для добавления новых тестов вы просто объявляете новый [TestMethod] void NewTest () {:: NewTest ();} и новая нативная функция void NewTest (). Никаких макросов, никаких трюков, все просто.
Теперь файл заголовка необязателен, но его можно использовать для предоставления методов класса Assert с собственными сигнатурами C ++ (например, wchar_t * вместо Stirng ^), так что вы можете держите его ближе к C ++ и подальше от C ++ / CLI:
Вот пример:
// Example
#pragma once
#pragma managed(push, on)
using namespace System;
class Assert {
public:
static void AreEqual(int expected, int actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
static void AreEqual(int expected, int actual, PCWSTR pszMessage) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual, gcnew String(pszMe
ssage));
}
template<typename T>
static void AreEqual(T expected, T actual) {
Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
}
// Etcetera, other overloads...
}
#pragma managed(pop)
HTH