C++ 使用fstream的Google测试方法

C++ 使用fstream的Google测试方法,c++,fstream,googletest,C++,Fstream,Googletest,我想为方法编写googletest,它返回void,并接受两个参数:filepath到file1和filepath到file2。此方法读取第一个文件中的一些数据并创建第二个文件,该数据将写入何处。为此,我使用了std::ifstream和std::ofstream。在测试中,我想调用我的方法,然后检查是否创建了第二个文件: TEST_F(ConverterTest, Convert) { converter.ConvertToBin(std::string("file1.txt"), std

我想为方法编写googletest,它返回
void
,并接受两个参数:filepath到file1和filepath到file2。此方法读取第一个文件中的一些数据并创建第二个文件,该数据将写入何处。为此,我使用了
std::ifstream
std::ofstream
。在测试中,我想调用我的方法,然后检查是否创建了第二个文件:

TEST_F(ConverterTest, Convert) {
  converter.ConvertToBin(std::string("file1.txt"), std::string("file2.txt"));
  std::ifstream data("file2.txt");
  EXPECT_TRUE(data.is_open());
}
我创建文件1并运行测试。但此测试失败,因为在方法
ConvertToBin()
-
std::basic\u ifstream.is\u open()
中失败(返回false)。文件1的路径完全正确

#include <fstream>
void Converter::ConvertToBin(const std::string& src_path,
                             const std::string& dst_path) {
  input_stream_ = std::ifstream(src_path, std::ios::in);
  if (!input_stream_.is_open())
    throw(std::string("Error."));

  output_stream_ = std::ofstream(dst_path,
                                 std::ios::binary | std::ios::out);
  if (!output_stream_.is_open())
    throw(std::string("Error."));

  ...
}

一切都好。在项目生成系统中,指向根目录的路径不正确。文件的前面路径错误。

是否关闭了
ConvertToBin()
中的
output\u stream\u
?这不是编写测试和可测试代码的正确方法。您应该将生产代码更改为,以便可以模拟
std::ifstream
std::ostream
的实例。然后您可以测试任何场景:例如,模拟文件创建失败。@Yksisarvinen是的,我做了。问题是这部分代码
的作用是什么?也许您可以将代码变得更抽象,并尽可能使用
std::istream
std::ostream
?然后在测试中,您可以使用
std::stringstream
而不是
std::fstream
#include <gtest/gtest.h>
#include "src/converter/converter.h"

class ConverterTest : public ::testing::Test {
 protected:
  ConverterTest() = default;
  Converter converter;
};