4

静的メソッドをモックする必要がある場合、これは私の設計に何らかの問題があることを示していますが、私の場合、これは設計上の問題ではないようです。

BundleContext bundleContext = FrameworkUtil.getBundle(ConfigService.class).getBundleContext();

ここで FrameworkUtil は、API jar に存在するクラスです。コードで使用することは、設計上の問題ではありません。

ここでの私の問題は、この行の実行中です

FrameworkUtil.getBundle(ConfigService.class); 

nullを返す だから私の質問は、実行時にそのnullを置き換える方法はありますか?私はMockitoフレームワークを使用していますが、私のプロジェクトではpowermockを使用できません。

私が使用する場合

doReturn(bundle).when(FrameworkUtil.class)

この方法では、getBundle メソッドは静的メソッドであるため表示されません。

4

2 に答える 2

2

単体テスト

package x;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;

public class GunTest {

  @Before
  public void setUp() throws Exception {
  }

  @Test
  public void testFireTrue() {
    final Gun unit = Mockito.spy(new Gun());
    Mockito.doReturn(5).when(unit).getCount();
    assertTrue(unit.fire2());
  }

  @Test
  public void testFireFalse() {
    final Gun unit = Mockito.spy(new Gun());
    Mockito.doReturn(15).when(unit).getCount();
    assertFalse(unit.fire2());
  }

}

ユニット: fire は静的メソッドを直接呼び出し、fire2 は保護されたメソッドへの静的呼び出しを除外します。

package x;

public class Gun {

  public boolean fire() {
    if (StaticClass.getCount() > 10) {
      return false;
    }
    else {
      return true;
    }
  }

  public boolean fire2() {
    if (getCount() > 10) {
      return false;
    }
    else {
      return true;
    }
  }

  protected int getCount() {
    return StaticClass.getCount();
  }
}
于 2013-11-13T06:15:25.533 に答える