1
私は、自分のメソッドを使用して、ユーザデータ設定メソッドからコインを追加したり減算したりする方法が正しく動作しているかどうかを確認しました。私はSharedPreferencesクラスを嘲笑し、コインの額を格納するローカル変数coins
を使用しています。 模擬メソッドがテストローカル変数から値を返さない
嘲笑のgetInt()はコインの正しい値を返していないようだが
: addCoinValidが失敗したテストを実行するには(予想:5、実際:0)。私はテスト中に2つの出力を作りました:変数:1 - mockedReturn:0
変数:5 - mockedReturn:左の数は変数と右の数の値が0
何模倣したgetInt()が返されます。
何が起こっているか教えていただけますか? :
class UserDataTest {
var coins = 0
val editor = mock<SharedPreferences.Editor>()
val sharedPrefs = mock<SharedPreferences> {
on{ getInt("coins", 0) } doReturn coins
on { edit() } doReturn editor
}
val context = mock<Context> {
on { getSharedPreferences("userdata", 0) } doReturn sharedPrefs
}
val userData = UserData(context)
@Before
fun initEditorMock() {
whenever(editor.clear()).thenReturn(editor)
whenever(editor.putInt(eq("coins"), any<Int>())).thenAnswer{ invocation ->
this.coins = invocation.getArgument(1)
[email protected] editor
}
}
@Test
fun addCoinValid() {
userData.setCoins(1)
println("variable: "+coins+" - mockedReturn: "+userData.getCoins())
userData.addCoins(5)
println("variable: "+coins+" - mockedReturn: "+userData.getCoins())
assertEquals(5, userData.getCoins())
}
// ...
}
そして、これがテストされたクラスである:O
これは私のテストです
class UserData(context: Context) {
val settings = context.getSharedPreferences("userdata", 0)
fun getCoins(): Int {
return settings.getInt("coins", 0)
}
fun setCoins(number: Int) {
settings.edit().clear().putInt("coins", number).apply()
}
fun addCoins(number: Int) {
if(number < 0) {
return
}
var coins = settings.getInt("coins", 0)
setCoins(coins+number)
}
}
作品、ありがとう。 :) – saitho