X



C++相談室 part146

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2019/11/07(木) 11:35:36.76ID:4wggfTwe
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part145
http://mevius.5ch.net/test/read.cgi/tech/1568362404/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
0964デフォルトの名無しさん
垢版 |
2019/12/17(火) 03:23:09.50ID:JQ5aWxOy
プライベートメンバの単体テストってみんなどうしてるのかな。
0969デフォルトの名無しさん
垢版 |
2019/12/17(火) 11:20:07.09ID:dc1/89bE
namespace Method{ namespace Detail {
template<typename ReturnType, typename ... ArgTypes> struct MethodRegister{};
} }
// 文字列で呼び出すための関数を登録するためのマクロ
#define METHOD_REGISTER_WITH_NAME( NAME, FUNC, RETURNTYPE, ... ) \
namespace Method { namespace Detail { \
template<> struct MethodRegister<RETURNTYPE, __VA_ARGS__> { \
using Functional = std::function<RETURNTYPE(__VA_ARGS__)>; \
MethodRegister() { \
MethodContainer::GetInstance().Register<RETURNTYPE, __VA_ARGS__>( #FUNC, Functional( static_cast<RETURNTYPE(*)( __VA_ARGS__ )>( FUNC ) ) ); \
} \
~MethodRegister() { \
MethodContainer::GetInstance().Unregister( #FUNC ); \
} \
}; \
static MethodRegister<RETURNTYPE, __VA_ARGS__> sMethodRegister##FUNC; \
} }
void HOGE(){
std::cout << "Hello World!" << std::endl;
}
void HOGE( std::string text ){
std::cout << text << std::endl;
}
METHOD_REGISTER_METHOD( HOGE, void );
METHOD_REGISTER_METHOD( HOGE, void, std::string );

こういった形で関数を登録する用のクラスを生成し、変数として生成して管理の自動化を行いたいのですが、
関数のオーバーロードを対応しようとした所、クラスの再定義や変数の再定義、管理クラスへの重複登録等
多数の問題が出て詰まってしまいました。
こういった問題を対処するにはどうすればよいのでしょうか?
0970デフォルトの名無しさん
垢版 |
2019/12/17(火) 11:28:10.65ID:rApV4krM
BOOST
0973◆QZaw55cn4c
垢版 |
2019/12/17(火) 19:10:07.01ID:780pCLgH
>>963
まあ、
({int r; while((r = index(n)) == 0) n--; r;})
の最後の
r;
というのが限りなく非文法的ですし
0974デフォルトの名無しさん
垢版 |
2019/12/17(火) 21:19:56.70ID:r3fDxRx7
プライベートメンバをテストしたくなったらそのロジックのみを非メンバ関数に切り出してテストしてるな。
まぁ、特に支障がなければ単純にpublicにするだけの時もあるけど。
0978デフォルトの名無しさん
垢版 |
2019/12/18(水) 06:18:11.97ID:BbfJ/y//
テストのテストが必要になるような意味のわからないテストコードはアウト
テストコードは実行せずに人が読んで理解できなければいけない
0979デフォルトの名無しさん
垢版 |
2019/12/18(水) 07:25:56.60ID:ksLRDXXy
>>978
どんな感じか見せていただけないでしょうか。
0980デフォルトの名無しさん
垢版 |
2019/12/18(水) 07:42:51.80ID:PEFQbiIG
>>971
絶対必要でもないが
少なくともデバッグ用であることくらい
アピールしたい
//よりNDEBUGという特定ワードを使う点にも拘りがある
0982デフォルトの名無しさん
垢版 |
2019/12/18(水) 11:33:15.65ID:ksLRDXXy
ループは許してもらえませんか?
データの並びとか検査したいんで。
条件分岐はたぶんないと思います。
0986デフォルトの名無しさん
垢版 |
2019/12/18(水) 13:34:17.71ID:YQOjezK4
典型的な糞テストは、テスト対象の出力がハッシュや現在時刻などのような予測しづらいものに依存している場合に、
テストコードにテスト対象自体のロジックと似たものを書いてしまっているケースだな
原則的には、期待する出力は全てハードコードするのが正しい
難しいなら一度試しにテスト対象を実行して目視テストし、その結果をハードコードしたほうがマシ
0989デフォルトの名無しさん
垢版 |
2019/12/18(水) 15:16:04.78ID:uFDqtnkl
>>986
期待する出力をハードコードするから
テストで「○○以上であること」って書くこと無いよね?
こういうテストケースある?言い換えるとそういうマッチャーって必要?
0991デフォルトの名無しさん
垢版 |
2019/12/18(水) 16:59:26.54ID:ksLRDXXy
よ。
0994デフォルトの名無しさん
垢版 |
2019/12/18(水) 21:11:16.67ID:LM1drZI+
クラスとかの勉強入る前にC言語でしっかり文字列処理出来るようになったほうがいい?
0996デフォルトの名無しさん
垢版 |
2019/12/18(水) 21:14:35.04ID:uFDqtnkl
C言語でしっかり文字列処理出来るようになったほうがいい? → いい
C++でC言語の文字列処理する? → しない
0999デフォルトの名無しさん
垢版 |
2019/12/19(木) 00:00:58.14ID:zX6m0cqE
単体テストはどんだけ単純でわかりやすいコードでテストパターンを網羅するかが肝
Google TestとかTest::MoreとかJUnit使ったらワカル
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 41日 12時間 33分 22秒
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況