[C++] Whiteboxで内部オブジェクトをmockオブジェクトに置き換える

テストしたいクラス

[cpp]

public class MyClass
{
private InternalClass internalClass;
void SomeMethod()
{
internalClass.InternalMethod();
}
}

[/cpp]

MyClassの内部で作られるクラス

[cpp]

public class InternalClass
{
// MyClass#SomeMethod()の中で呼ばれるMock化したいメソッド
public void InternalMethod()
{
// do something
}
}

[/cpp]

テストコード

[cpp]

public class MyClassUTest
{
@Spy
InternalClass mockInternalClass = new InternalClass();

MyClass MyClass;

@Before
void setUp()
{
myClass = new MyClass();
doNothing().when(internalClass).internalMethod(any());
Whitebox.setInternalState(myClass, "internalClass", mockInternalClass);

}

@Test
public void testMyClass()
{
myClass.SomeMethod();
}
}
[/cpp]

[C++] PowerMockで内部オブジェクトをmock化する

テストしたいクラス

[cpp]

public class SomeClass
{
private InternalClass internalClass;
void SomeMethod()
{
internalClass.InternalMethod();
}
}

[/cpp]

SomeClassの内部で作られるクラス

[cpp]

public class InternalClass
{
// SomeClass#SomeMethod()の中で呼ばれるMock化したいメソッド
public void InternalMethod()
{
// do something
}
}

[/cpp]

テストコード

[cpp]
@RunWith(PowerMockRunner.class)
@PrepareForTest(SomeClass.class)
public class SomeClassUTest
{
@Mock
InternalClass internalClass;

@Before
void setUp()
{
doNothing().when(internalClass).internalMethod(any());
PowerMockito
.whenNew(InternalClass.class)
.withAnyArguments()
.thenReturn(internalClass);
}

@Test
public void testSomeClass()
{
someClass = new SomeClass();
someClass.SomeMethod();
}
}
[/cpp]

Twitterアプリ『にゃ~ん』のプライベートポリシー

収集するデータ

『にゃーん』が収集するデータはありません。

プライバシーポリシーの変更

『にゃーん』のプライバシーポリシーは予告なく変更される場合があります。

免責事項

『にゃーん』の使用により何らかのトラブルや損失・損害があった場合でも一切の責任を負いません。

 

[C++/Windows] wstring/UTF16でエンコードされたファイルを読み込む

wstring の場合

[cpp]
#include <codecvt>
#include <iostream>
#include <locale>
#include <fstream>

int main()
{
std::basic_ifstream<wchar_t> ifs("C:\\hoge1.txt", std::ios::binary);
ifs.imbue(std::locale(
ifs.getloc(),
new std::codecvt_utf16<wchar_t, 0x10ffff, std::codecvt_mode( std::little_endian |std::consume_header)>));

std::vector<wchar_t> buf(100);
ifs.read(buf.data(), 100);
std::basic_string<wchar_t> istr(buf.data());
}
[/cpp]

UTF16の場合

[cpp]
#include <codecvt>
#include <iostream>
#include <locale>
#include <fstream>

int main()
{
std::basic_ifstream<uint16_t> ifs("C:\\hoge1.txt", std::ios::binary);
ifs.imbue(std::locale(
ifs.getloc(),
new std::codecvt_utf16<uint16_t, 0x10ffff, std::codecvt_mode( std::little_endian |std::consume_header)>));

std::vector<uint16_t> buf(100);
ifs.read(buf.data(), 100);
std::basic_string<uint16_t> istr(buf.data());
}
[/cpp]