新10 1- カキコミ
JAVA神様 かざっさま[1]アヌス 2009/01/27 18:37
投稿できなくなってしまったので、新しいスレッドにもう一度貼りますです。

何文字かのstringを受け取ってその文字列の真ん中2文字だけをreturnで返したいのです。文字が奇数の場合は右よりの2文字です。
例) 
middleTwo("abcd") → "bc"
middleTwo("abcde") → "bc"
文字列は必ず2文字以上あると前提しますです。

それともう一つ。取得した数字が奇数ならfalse偶数ならtrueを返すプログラムです。
例)
isEven (24) → true
isEven (25) → false

どうやらこれは、2つのメソッド(真ん中の文字プログラムと、奇数偶数プログラム)をクラスTwoMethodsに書いて、
それぞれのメソッドに、テストメソッドをクラスTwoMethodsTestに書く、というものらしいのですが、プログラムを貼ります。
しかいしくつか抜けてるところがあってそれをコンプリートしなきゃいけないみたいです。



このクラスは、Stringsといくつかの基本となるタイプを処理するメソッドをテストするための2つのメソッドのテストが記されている(日本語がおかしい・・・汗)
import static org.junit.Assert.*;
import org.junit.Test;

public class TwoMethodsTest {
@Test
public void testMiddleTwo() {

//ここにTwoMethodsオブジェクトが要ります//

TwoMethods myFuns = new TwoMethods();

//middleTwoメソッドをテストするための4つのケース//
assertEquals("bc", myFuns.middleTwo("abcd"));
assertEquals("bc", myFuns.middleTwo("abcde"));
assertEquals("23", myFuns.middleTwo("12345"));
assertEquals("pu", myFuns.middleTwo("Computers"));
assertEquals("to", myFuns.middleTwo("to"));
assertEquals("is", myFuns.middleTwo("antidisestablishmentarianism"));
}
//もう一つのテストメソッドを以下に
}

ここからテストされるメソッドのクラス
public class TwoMethods {
public String middleTwo(String arg) {
return "TBA"; //ここのメソッドを変えなければならないようです。
}
//もうちょっといくつかのメソッドを以下に
}

おそらくエラーが出るそうです。JUnit 4はbuild pathにないからだとか。だからJUnit 4をbuild pathに加えないといかんとかなんとか・・・
JUnit testとして実行する。でもassertionはパスしない(赤いバーになる)。
だからTwoMethods.middleTwo(String)を修正する必要があると・・・

次は奇数か偶数かのメソッド。テストメソッドはTwoMethodsTest.javaへ、isEvenメソッドはTwoMethods.javaへ。そして新しいTwoMethodsを作る必要があります。

public boolean isEven(int number)
@Test
public void testIsEven() {
TwoMethods myFuns = new TwoMethods();
assertTrue(myFuns.isEven(24));

//ここにあといくつかassertionを加えたいのです。
assertFalse(myFuns.isEven(25));
みたいな感じでいいのかな。多分他のケースも加えないといかんのかな。

}
自分でも書いてて理解できん・・・。かざっさん、この意味わかる・・・?
[2]大和 2009/01/27 18:55
1000までいかないなんてひさしぶりだなあ
スレたてどうもです!
[3]大和 2009/01/27 19:02
真ん中の2文字を切り取るプログラムは,
length() メソッドを使いそうだなあ。

奇数ならfalse偶数ならtrueを返すプログラムは,
単純に計算処理をすれば良さそうかな!

ちょっと夕ご飯食べてくるね。
19時40分まで待ってねごめんね。

[4]アヌス 2009/01/27 19:16
そうなんだよね。length()で文字数はかって2で割ったところの2文字を返せばいいだけだよね。
理解できないところは、テストメソッドとか、テストメソッドはTwoMethodsTest.javaへ行ってisEvenメソッドはTwoMethods.javaへ行くってのがサッパリです
テストされるメソッドのクラスに、length()を使った処理をするんだろうけど、ならテストメソッドって一体・・・?
普通に全部一緒にかけばいいと思うのになんでいちいちテストメソッドとかなんとか・・・と頭がこんがらがってしまっています・・・
上のソースが理解できない・・・
[5]大和 2009/01/27 19:59
テストメソッドはね!
本当にただ単に結果がちゃんと正しい結果が出るか,
テストしてるだけなんだ。

つまり,
テストメソッドがなくても,
プログラム2つとも動作します!

テストメソッドはプログラムのコードが完成したら,
あとでつけ足して,で動作確認するためのコードなんです。
テストメソッドがあろうとなかろうと,プログラムは動作するんですね。
だから今は,


<tt>
// 現段階では不要なコードのため,コメントアウト。
// import static org.junit.Assert.*;
// import org.junit.Test;
//
// public class TwoMethodsTest {
//
//     // isTwo() のコード書き終わるまで,こいつはお預け。
//     @Test
//     public class testMiddleTwo {}
//     // isEven() のコード書き終わるまで,こいつはお預け。
//     @Test
//     public void testIsEven() {}

public class TwoMethods {
    public String middleTwo(String arg) {
        return "TBA"; // ここのメソッドを変えなければならないようです。→大和:了解。
    }

    public boolean isEven(int number) {
        return; // true か false を返せばいいね。
    }
}
</tt>

まず土台はこんな感じかな!
[6]大和 2009/01/27 20:48
あ なんか土台だけ作っちゃえばもうみさきっさんできそうな予感が(’’
一応もうちょっと書いてみるね。



真ん中の2文字を切り取るプログラム

1. 引数で取得した String 型変数「arg(仮に「abcdef」とする)」の,真ん中2文字(「cd」)を取得する。
 1.1. 「1.」で取得した値を length() で文字数(「6」)を調べる。
 1.2. 文字数を 2 で割り,商を求める(結果は 3)。
 1.3. 「1.」で取得した値に,substring(「2.2. で求めた値 - 1」, 「2.2. で求めた値」) する。
  →この場合,「"abcdef".substring((3 - 1), 3)」と同義。

2. 「1.3.」で取得した値を return する。



奇数ならfalse偶数ならtrueを返すプログラム

1. 引数で取得した int 型変数「number」,奇数か偶数か判断する。
 1.1. 「1.」で取得した値を 2 で割り,余りを求める。
 1.2. 余りが 0 なら true に,1 なら false とする。

2. 「1.2.」で取得した値を return する。
[7]アヌス 2009/01/27 20:33
いえ、すみません・・・ちょと頭の整理ができてなくて・・・
全体のプログラムではどのようになるんでしょうか・・・

コード書き終わったらテストメソッドを作るのか・・・。多分今回の課題ではやはりテストも作らないといけないのかな。
かざっさん、この場合のテストメソッドの作り方も聞いていいですか?
[8]アヌス 2009/01/27 20:35
普通に真ん中の文字を返すとか異数偶数のプログラムを組むってんならすごいシンプルですぐできるんだけど、テストとか新しいのがまざった瞬間 いみわからんくなってしまう・・・
応用きくようにしないとダメだな・・・ショボン
[9]大和 2009/01/27 21:00
>>7,8
了解!
テストメソッドとプログラムのメソッドは,完っ璧に切り離して考えていいよ!
つまり,今はテストメソッドの事は,100%忘れちゃってください。

真ん中メソッドと偶奇メソッドの,
2つのメソッドを作る事だけ,考えてくれればいいよ!

真ん中メソッドと偶奇メソッドを完成させるまで,
テストメソッドは ま っ た く 関与してきません。
作ったあとにはじめて関与します。
これは作ったあとに,その意味がわかるはず^ω^。

なので今は,
「@Test ってなに・・・?」
「TwoMethods myFuns = new TwoMethods() ってなに・・・?」
「assertEquals("bc", myFuns.middleTwo("abcd")) ってなに・・・?」
とか,一切考えなくて大丈夫!

テストメソッドに関係する全ての事柄を,今は一切考えずに作ってくれて大丈夫だよ!
[10]大和 2009/01/27 21:02
テストメソッドも作るのが,今回の課題みたいだねー。
コードが出来上がったらテストメソッドを作ってみましょう!

なあに,テストメソッド作りはじめたら,ああこういう事だったのねってすぐわかるはずさ。
まずは,今は2つのプログラム作ってくれて大丈夫だよー。
カキコミ
r.php ver2.5 (2005/03/28)