Tôi đang gặp khó khăn để tìm hiểu làm thế nào để có được những khuôn khổ kiểm tra thiết lập và sử dụng được trong Visual Studio 2008 cho C++
lẽ với bộ ứng dụng tích hợp trong đơn vị thử nghiệm.
Bất kỳ liên kết hoặc hướng dẫn sẽ được đánh giá cao.
Tôi đang gặp khó khăn để tìm hiểu làm thế nào để có được những khuôn khổ kiểm tra thiết lập và sử dụng được trong Visual Studio 2008 cho C++
lẽ với bộ ứng dụng tích hợp trong đơn vị thử nghiệm.
Bất kỳ liên kết hoặc hướng dẫn sẽ được đánh giá cao.
Câu trả lời:
Trang này có thể hữu ích, nó đánh giá khá nhiều khung kiểm tra đơn vị C ++:
Kiểm tra CPPUnitLite hoặc CPPUnitLite2 .
CPPUnitLite được tạo ra bởi Michael Feathers, người ban đầu đã chuyển JUnit của Java sang C ++ dưới dạng CPPUnit (CPPUnit cố gắng bắt chước mô hình phát triển của JUnit - nhưng C ++ thiếu các tính năng của Java [ví dụ: phản chiếu] để dễ sử dụng).
CPPUnitLite cố gắng tạo ra một khung kiểm tra kiểu C ++ thực sự, chứ không phải một khung Java được chuyển sang C ++. (Tôi đang diễn giải từ cuốn sách Làm việc hiệu quả với Legacy Code của Feather ). CPPUnitLite2 dường như là một bản viết lại khác, với nhiều tính năng hơn và sửa lỗi.
Tôi cũng chỉ tình cờ xem UnitTest ++ bao gồm những thứ từ CPPUnitLite2 và một số khuôn khổ khác.
Microsoft đã phát hành WinUnit .
Có một cách để kiểm tra C ++ không được quản lý bằng cách sử dụng khung kiểm tra được xây dựng trong Visual Studio 2008 . Nếu bạn tạo Dự án thử nghiệm C ++, sử dụng C ++ / CLI, thì bạn có thể thực hiện các cuộc gọi đến một DLL không được quản lý. Bạn sẽ phải chuyển hỗ trợ Common Language Runtime sang / clr từ / clr: safe nếu bạn muốn kiểm tra mã được viết bằng C ++ không được quản lý.
Tôi có chi tiết từng bước trên blog của mình tại đây: http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/
Đây là phương pháp tôi sử dụng để kiểm tra mô-đun IIS URL Rewrite tại Microsoft (nó dựa trên dòng lệnh, nhưng cũng sẽ hoạt động cho VS):
Đây là một ví dụ:
// 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();
}
};
Với cách tiếp cận này, mọi người không phải học quá nhiều thứ C ++ / CLI, tất cả bài kiểm tra thực sự sẽ được thực hiện bằng C ++ gốc và lớp TestShim sẽ được sử dụng để 'xuất bản' bài kiểm tra lên MSTest.exe (hoặc hiển thị nó ).
Để thêm các bài kiểm tra mới, bạn chỉ cần khai báo một phương thức [TestMethod] void NewTest () {:: NewTest ();} mới và một hàm gốc void NewTest () mới. Không có macro, không có thủ thuật, đơn giản.
Bây giờ, tệp heade là tùy chọn, nhưng nó có thể được sử dụng để hiển thị các phương thức của lớp Assert với chữ ký gốc C ++ (ví dụ: wchar_t * thay vì Stirng ^), vì vậy bạn có thể giữ nó gần với C ++ và xa C ++ / CLI :
Đây là một ví dụ:
// 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á nhân tôi thích WinUnit hơn vì nó không yêu cầu tôi viết bất cứ thứ gì ngoại trừ các bài kiểm tra của tôi (tôi tạo .dll làm bài kiểm tra, không phải exe). Tôi chỉ xây dựng một dự án và trỏ WinUnit.exe đến thư mục đầu ra thử nghiệm của tôi và nó chạy mọi thứ mà nó tìm thấy. Bạn có thể tải xuống dự án WinUnit tại đây . (MSDN hiện yêu cầu bạn tải xuống toàn bộ vấn đề, không phải bài báo. WinUnit được bao gồm trong.)
Khung bao gồm VS9 là .NET, nhưng bạn có thể viết các bài kiểm tra bằng C ++ / CLI, vì vậy, miễn là bạn cảm thấy thoải mái khi học một số phần mềm .NET, bạn sẽ có thể kiểm tra hầu hết mọi mã C ++.
boost.test và googletest trông khá giống nhau, nhưng được điều chỉnh cho các mục đích sử dụng hơi khác nhau. Cả hai đều có thành phần nhị phân, vì vậy bạn sẽ cần một dự án bổ sung trong giải pháp của mình để biên dịch và chạy thử nghiệm.
Khung mà chúng tôi sử dụng là CxxTest , nhẹ hơn nhiều; nó chỉ là tiêu đề và sử dụng tập lệnh Perl (!) để quét thông tin bộ thử nghiệm từ các tiêu đề của bạn (các bộ kế thừa từ CxxTest :: Base, tất cả các tên phương pháp thử nghiệm của bạn đều bắt đầu bằng "test"). Rõ ràng, điều này yêu cầu bạn lấy Perl từ nguồn này hay nguồn khác , điều này làm tăng thêm chi phí cho thiết lập môi trường xây dựng của bạn.
Tôi sử dụng UnitTest ++ .
Trong những năm kể từ khi tôi thực hiện bài đăng này, nguồn đã chuyển từ SourceForge sang github. Ngoài ra, hướng dẫn ví dụ bây giờ là bất khả tri hơn - không đi vào bất kỳ cấu hình hoặc dự án nào được thiết lập.
Tôi nghi ngờ nó sẽ vẫn hoạt động cho Visual Studio 6 vì các tệp dự án hiện được tạo thông qua CMake. Nếu bạn vẫn cần hỗ trợ phiên bản cũ hơn, bạn có thể tải phiên bản có sẵn cuối cùng dưới nhánh SourceForge .
Các công cụ đã được đề cập ở đây là tất cả các công cụ dòng lệnh. Nếu bạn tìm kiếm một giải pháp tích hợp hơn, hãy xem cfix studio , là một Visual Studio AddIn để thử nghiệm đơn vị C / C ++. Nó khá giống với TestDriven.Net, nhưng dành cho C / C ++ (không được quản lý) hơn là .NET.
Tôi không chắc 100% về VS2008, nhưng tôi biết rằng khung Unit Testing mà microsoft đã vận chuyển trong VS2005 như một phần của Team Suite của họ chỉ dành cho .NET, không phải C ++
Tôi cũng đã sử dụng CppUnit và nó ổn. Cũng giống như NUnit / JUnit / v.v.
Nếu bạn đã sử dụng boost, họ cũng có một thư viện kiểm tra đơn vị
Những người đứng sau boost có một số đoạn mã nghiêm túc , vì vậy tôi muốn nói rằng khung của họ phải khá tốt, nhưng nó có thể không thân thiện với người dùng nhất :-)
Trình kiểm tra đơn vị cho Visual Studio 2008 chỉ dành cho mã .NET theo như tôi biết.
Tôi đã sử dụng CppUnit trên Visual Studio 2005 và thấy nó hoạt động khá tốt.
Theo như tôi nhớ, việc thiết lập tương đối dễ dàng. Chỉ cần đảm bảo rằng trong các dự án thử nghiệm của bạn, trình liên kết (Trình liên kết → Đầu vào → Phụ thuộc bổ sung) bao gồm cppunitd.lib.
Sau đó, #include <cppunit/extensions/HelperMacros.h>
trong tiêu đề của bạn.
Sau đó, bạn có thể làm theo các bước trong http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html để lớp thử nghiệm của bạn hoạt động.
Tôi đã phải cố gắng triển khai thử nghiệm đơn vị cho một ứng dụng C ++ không được quản lý trong môi trường Windows với Visual Studio. Vì vậy, tôi đã cố gắng vượt qua và viết một bài đăng dưới dạng hướng dẫn từng bước để kiểm tra đơn vị ứng dụng C ++ không được quản lý. Tôi hy vọng nó có thể giúp bạn.
Bài kiểm tra đơn vị cho C ++ không được quản lý trong Visual Studio