标签: catch-unit-test

cmake ExternalProject_Add 如何下载 URL 非 tar 文件?

如何设置外部项目以下载不是 .tgz 文件的链接?

例如,Catch提供了一个单头分发版本。我只想下载这个而不是 git repo 或 .tgz 版本。但我还没有想出如何告诉 CMake 这样做。

我想做类似的事情:

Include(ExternalProject)
ExternalProject_Add(
    catch
    PREFIX ${CMAKE_BINARY_DIR}/catch
    URL https://github.com/philsquared/Catch/releases/download/v1.9.6/catch.hpp ${CMAKE_BINARY_DIR}/catch
    CONFIGURE_COMMAND ""
    BUILD_COMMAND ""
    INSTALL_COMMAND ""
    LOG_DOWNLOAD ON
)
Run Code Online (Sandbox Code Playgroud)

这将失败,因为 URL 假定 url 是压缩的 tar 文件。我尝试了DOWNLOAD_COMMAND 的各种变体,但都没有成功。

cmake catch-unit-test

3
推荐指数
1
解决办法
1620
查看次数

如何在 Bazel 项目中设置 Catch2

我已经启动了一个简单的 C++ 项目,该项目使用 Bazel 作为构建系统,并希望将 Catch2 添加到其中作为测试框架。

这是我的项目到目前为止的样子:

WORKSPACE -> empty file
src/
  Money.hpp
  Money.cpp
BUILD
Run Code Online (Sandbox Code Playgroud)

其中 BUILD 只是

WORKSPACE -> empty file
src/
  Money.hpp
  Money.cpp
BUILD
Run Code Online (Sandbox Code Playgroud)

我希望能够为每个创建测试cc_library,在本例中为Money. 我尝试设置它,但与 Catch2 main 感到困惑。任何有关如何做到最好的建议都将受到赞赏!

c++ testing catch-unit-test bazel catch2

3
推荐指数
1
解决办法
1512
查看次数

C++中的异常和BDD - Catch库

到目前为止我一直在使用Boost.Test,但我现在正在考虑使用带有Catch的BDD,但是我在查找处理异常的好方法时遇到了一些麻烦.说我有这样的测试:

SCENARIO("connection handling", "[network]") {
    boost::asio::io_service io;
    GIVEN("a connection that should fail") {
        connection::ptr conn = connection::create(new fake_provider<connection_refused>(io));
        WHEN("trying to connect") {
            conn->connect("localhost", 1);
            THEN("connection was refused") {
                some stuff to verify exception code
                REQUIRE(conn->connected() == false);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想知道如何处理connect()将以一种很好的方式抛出异常的事实.我想我可以保存并将异常存储在try-catch中并在那之下验证,但这似乎不太好.在我的Boost.Test测试用例中,我这样做了:

bool error_is_connection_refused(boost::system::system_error ex) {
    return ex.code() == boost::system::errc::connection_refused;
}
BOOST_AUTO_TEST_CASE(connect)
{
    connection::ptr conn_refuse = connection::create(new fake_provider<connection_refused>(*io_ptr));
    BOOST_REQUIRE_EXCEPTION(conn_refuse->connect("localhost", 1),
                            boost::system::system_error,
                            error_is_connection_refused);
    BOOST_REQUIRE_EQUAL(conn_refuse->connected(), false);
}
Run Code Online (Sandbox Code Playgroud)

但这似乎不是很BDD.在使用BDD测试时,人们通常如何处理异常抛出代码?

c++ bdd unit-testing catch-unit-test

2
推荐指数
1
解决办法
1080
查看次数

Catch 单元测试订购

我想使用Catch对 C++ 库进行单元测试。但是,我需要按顺序运行大部分测试用例。即库需要以某种方式初始化,然后用户登录等。是否有任何设计模式可以实现这一点。

预先感谢。

c++ unit-testing catch-unit-test

2
推荐指数
1
解决办法
1556
查看次数

"Catch"单元测试框架 - REQUIRE_THROWS_AS

我开始使用"Catch"单元测试框架,到目前为止它真的很棒.我使用VS内置单元测试框架,非常痛苦.

有一件事我注意到宏REQUIRE_THROWS_AS不像人们期望的那样表现

来自文档:

REQUIRE_THROWS_AS( expression, exception type ) and
CHECK_THROWS_AS( expression, exception type )
Run Code Online (Sandbox Code Playgroud)

期望在评估表达式期间抛出指定类型的异常.

当我试着写

TEST_CASE("some test") {
    SECTION("vector throws") {
        std::vector<int> vec;
        REQUIRE_THROWS_AS(vec.at(10), std::logic_error);
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望测试失败,但它说测试通过了.框架中有错误还是我错了?

c++ testing unit-testing catch-unit-test

2
推荐指数
1
解决办法
3146
查看次数

Catch失败就简单的例子而言

我正在尝试将Catch单元测试集成到我的项目中,但是对于当前可用的测试来说它失败了

Catch v1.10.0
Generated: 2017-08-26 15:16:46.676990
Run Code Online (Sandbox Code Playgroud)

例:

test.cpp

#include "catch.hpp"

#define CATCH_CONFIG_MAIN


TEST_CASE("CATCH TEST"){
    REQUIRE(1 == 1);
}
Run Code Online (Sandbox Code Playgroud)
g++ test.cpp -o test.exe -std=c++11
Run Code Online (Sandbox Code Playgroud)

错误:

Undefined symbols for architecture x86_64:
  "Catch::ResultBuilder::endExpression(Catch::DecomposedExpression const&)", referenced from:
      Catch::BinaryExpression<int const&, (Catch::Internal::Operator)0, int const&>::endExpression() const in test-b77427.o
  "Catch::ResultBuilder::setResultType(bool)", referenced from:
      Catch::BinaryExpression<int const&, (Catch::Internal::Operator)0, int const&>::endExpression() const in test-b77427.o
  "Catch::ResultBuilder::useActiveException(Catch::ResultDisposition::Flags)", referenced from:
      ____C_A_T_C_H____T_E_S_T____0() in test-b77427.o
  "Catch::ResultBuilder::react()", referenced from:
      ____C_A_T_C_H____T_E_S_T____0() in test-b77427.o
  "Catch::ResultBuilder::ResultBuilder(char const*, Catch::SourceLineInfo const&, char const*, Catch::ResultDisposition::Flags, char const*)", referenced from:
      ____C_A_T_C_H____T_E_S_T____0() in test-b77427.o …
Run Code Online (Sandbox Code Playgroud)

c++ c++11 catch-unit-test

2
推荐指数
1
解决办法
699
查看次数

为什么我们需要使用Catch单独编译主测试文件?

我编写了以下Makefile(它按预期工作):

CXX2 = clang++
CXXFLAG2 = -std=c++11 -c -g -O0 -Wall -Wextra
LD2 = clang++
LDFLAG2 = -std=c++11

testing: data_test.o test_main.o dataframe.o csvreader.o course.o
    $(LD2) $^ $(LDFLAG2) -o $@

data_test.o: test/data_test.cpp
    $(CXX2) $< $(CXXFLAG2)

test_main.o: test/test_main.cpp
    $(CXX2) $< $(CXXFLAG2)

dataframe.o: src/DataFrame.cpp src/CSVReader.cpp src/Course.cpp
    $(CXX2) $< $(CXXFLAG2)
Run Code Online (Sandbox Code Playgroud)

在我的test_main.cpp文件中,我只有以下几行:

#define CATCH_CONFIG_MAIN
#include "catch.hpp"
Run Code Online (Sandbox Code Playgroud)

我试着看看我的Makefile中是否可以替换测试规则,如下所示:

data_test.o: test/data_test.cpp test/test_main.cpp
    $(CXX2) $< $(CXXFLAG2)
Run Code Online (Sandbox Code Playgroud)

但是,我收到一个"_main", referenced from: implicit entry/start for main executable错误.对我来说,它似乎应该工作正常,包括test_main.cpp作为我的实际测试的依赖.是否有理由将此主文件编译为自己的.o文件?

c++ linker makefile catch-unit-test

2
推荐指数
1
解决办法
71
查看次数

在C++ TDD中调用重载const与非const方法的好方法?

所有

用迭代器写了一些花哨的容器.所以我有

iterator begin() {
}

iterator end() {
}

const_iterator begin() const {
}

const_iterator end() const {
}
Run Code Online (Sandbox Code Playgroud)

在测试中,我实例化容器,填充并测试它.调用const和非const版本的接受/好方法是什么?说,简单的测试就好

TEST( c.end() - c.begin() == c.size() );
Run Code Online (Sandbox Code Playgroud)

应该运行迭代器和const迭代器.Const参考?有些丑陋的演员?

c++ tdd unit-testing catch-unit-test

1
推荐指数
1
解决办法
105
查看次数

标签 统计

catch-unit-test ×8

c++ ×7

unit-testing ×4

testing ×2

bazel ×1

bdd ×1

c++11 ×1

catch2 ×1

cmake ×1

linker ×1

makefile ×1

tdd ×1