Я хочу начать писать модульные тесты для буферного класса, и я немного борюсь со статическим методом create.
class MyBuffer
{
public:
static MyBuffer* create(int32 bufSize)
{
if(!bufSize)
return nullptr;
char* internalBuf = (char*)malloc(bufSize);
if(nullptr == internalBuf) return nullptr;
return new MyBuffer(internalBuf, bufSize);
}
public bool write(void* data, int32 dataSize) {...}
private:
MyBuffer(char* buf, int32 size) : internalBuf(buf), size(bufSize) {}
char* internalBuf = nullptr;
int32 bufSize = 0;
};
//just dummy code
TEST(MyBuffer bufferWithZeroSize)
{
auto buf = MyBuffer::create(0);
ASSERT_True(nullptr == buf);
}
TEST(MyBuffer writeDataToBuffer)
{
//arrange
auto buf = MyBuffer::create(50);
ASSERT_NotNull(buf); //is this call needed
//act
buf->write(...);
//assert
}
Проверка процесса создания MyBuffer прошла нормально.
В моем втором тесте можно предположить, что процесс создания MyBuffer прошел успешно? В противном случае я должен проверить это в «актовой» части модульного теста. Это звучит не очень разумно для меня, потому что я хочу проверять только одну вещь за единицу теста С другой стороны, я знаю, что вызов malloc может завершиться ошибкой.
Как вы тестируете объекты с помощью статического метода создания? Существуют ли какие-либо полезные стратегии тестирования или рекомендуется реорганизовать такие объекты? Я в основном использую статические методы create, чтобы вызывающая сторона объекта забыла правильно инициализировать объект. Поэтому для меня это звучит обоснованно.