#GTest

2025-06-18

SPM + GTest

If you need to expose a C++ library with via , there is a straightforward way to wrap existing tests with :

1. Add gmock as a .systemLibrary target in your Package.swift and link it to your .testTarget.

2. Create a module map and an umbrella header for gmock.

3. Create an Obj-C++ adapter that wraps GoogleTest with XCTestCase.

πŸš€ CMD + U

// Package.swift
let package = Package(
  	...
	.systemLibrary(
		name: "gmock",
	  	path: "spm-support/gmock",
   		pkgConfig: "gmock", // -> /opt/homebrew/Cellar/googletest/.../lib/pkgconfig/gmock.pc
   		providers: [.brew(["googletest"])]), // Note: SPM does *not* invoke 'brew install'
  	...
	.testTarget(
        name: "targetTests",
		dependencies: ["target", "gmock"],
        path: "target/test"),
)

// spm-support/gmock/module.modulemap
module gtest [system] {
  header "gmock.h"
  link "gmock" // -> /opt/homebrew/Cellar/googletest/.../lib/libgmock.a
  export *
}
    
// spm-support/gmock/gmock.h
#include <gmock/gmock.h>
    
// target/test/xctest_adapter.mm
#import <XCTest/XCTest.h>
#import <gmock/gmock.h>

@interface TargetTests : XCTestCase
@end

@implementation TargetTests

+ (void)initialize {
    ::testing::InitGoogleTest();
}

- (void)test_all {
    XCTAssertEqual(0, RUN_ALL_TESTS());
}

// Or create a separate method for each GTest.

- (void)test_SomeGoogleTestFixture_SomeGoogleTest {
    ::testing::GTEST_FLAG(filter) = "SomeGoogleTestFixture.SomeGoogleTest";
    XCTAssertEqual(0, RUN_ALL_TESTS());
}

@end
2025-05-30

ΠŸΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ООП ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΡŽΠ½ΠΈΡ‚-тСстами Π² C++

Legacy ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π½Π° Π‘++ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ нСсколько Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это: Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, поставляСмыС ΠΊΠ°ΠΊ ООП Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ (НСкоторыС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ boost, SOCI ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€) Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС (OpenGL Ρ‡Π΅Ρ€Π΅Π· Π‘ API, POSIX ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€) Из-Π·Π° этого Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ сущности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· классы, Π½ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса ΠΈΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ функциям. НСкоторыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ спСцифичныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ для своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Как ΠΏΡ€ΠΈΠΌΠ΅Ρ€: поиск ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… устройств ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π½ΠΈΡ… ссылок для дальнСйшСй Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ большого количСства памяти. ВслСдствиС этого Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос - ΠΊΠ°ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΡŽΠ½ΠΈΡ‚-тСстами спСцифичных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… условий для своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹?

habr.com/ru/companies/megafon/

#c++ #gtest #google_testing_framework #mocking #unittesting #unittests

Sean Eric Fagankithrup@wandering.shop
2024-07-18

Ok. I am very bad at unit tests. I would like to create some. This is on #macos; we use #cmake for the most part, and the #gtest suite for tests, but I'm ok if I can only make something for #xcode

One issue I don't understand is: in Swift, if I want to use a substitute class for a system one (specifically, NEAppProxyFlow and its subclasses)... how do I handle that? Do I provide my own module "NetworkExtension" for the unit tests? Or something else?

2024-06-25

We've been working toward deprecating GTest for our testing library in favor of our in-house JTest testing library. J3ML our 3D math library is the current target for rewriting our unit tests to utilize JTest.

#C++ #TestingLibrary #GTest #GameDev #UnitTesting

2023-12-30

I wrote about my first experiences with the #meson build system and with #GTest framework to test #C++ code.

In the while I also wrote a simple #logging library compatible with #MPI.

blog.movimento-centrale.it/pos

lohikÀÀrmekettu Saphira :therian:littlefox@gotosocial-dev.svc.0x0a.network
2023-10-31

Anyone here a #googletest #gtest contributor and willing to take a look at my PR? Boosts very welcome :3

https://github.com/google/googletest/pull/4402

2023-04-18

Okay, so when using #gtest / #gmock / #googletest to write C++ unit tests for code that uses dependency injection, how the *hell* do go about mocking dependencies of a class under test without having to mock the dependency class' dependencies, and *those* class' dependencies, and so on until you've mocked every class in the dependency tree of the class under test?

"Interfaces" or "templates" are *not* valid answers, as they drive complexity into your non-test code purely to support testing!

Tigre-Bleuβœ“tigrebleu@framapiaf.org
2018-04-17

En train de découvrir le fonctionnement de la monnaie Ğ1 via @monnaielibreoccitanie

Je me suis inscrit sur ĞTest afin de me familiariser quelqu'un pour me certifier?

Inscrit sous Tigre-Bleu
voici ma clef publique: 8dDufS4JUkW1yEf753ibamHsLR5GJKF9NL6cGnMbiygW

#duniter #gtest #ğtest #cesium #sakia #basicincome

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst