3

AppEngine単体テスト ガイドラインを読み、Java Datastore サービス テストは機能しましたが、Channel サービスがうまくいきません。このガイドには、チャネル テストの具体的な例は示されておらず、Javadoc もあまり役に立ちませんが、私の IDE には、ローカル チャネル サービスの単体テスト用と思われるいくつかのクラスが表示されています。私はそれらを使用する方法を理解できません。

GAE Channel Service をテストした経験や例はありますか?

4

3 に答える 3

2

以下は私のために働いています:

import unittest

from google.appengine.api import channel
from google.appengine.ext import testbed


class TestCase(unittest.TestCase):

  def setUp(self):
    self.testbed = testbed.Testbed()
    self.testbed.activate()
    self.testbed.init_channel_stub()

  def test_send(self):
    channel_stub = self.testbed.get_stub('channel')
    token = channel.create_channel('ClientID1')
    channel_stub.connect_channel(token)
    channel.send_message('ClientID1', 'hello')
    channel_messages = channel_stub.get_channel_messages(token)
    channel_stub.clear_channel_messages(token)
    self.assertEquals(['hello'], channel_messages)


if __name__ == '__main__':
  unittest.main()

チャネル サービス スタブのソース コードも参照できます。

于 2012-06-25T16:02:34.203 に答える
1

Ivan はきちんとした Python の例を提供してくれました。ここに Java のソリューションがあります。

ここにテストしたいコードがあるとします

public class ClientChannelService {

    private ChannelService channelService = ChannelServiceFactory.getChannelService();

    public String createToken(){
        return channelService.createChannel(UUID.randomUUID().toString());
    }

    public void sendMessage(String token, String message){
        channelService.sendMessage(new ChannelMessage(token, message));
    }
}

appengine-testing.jarまず、クラスパスに追加します。

<dependency>
   <groupId>com.google.appengine</groupId>
   <artifactId>appengine-testing</artifactId>
   <version>${appengine.version}</version>
   <scope>test</scope>
</dependency>

次に、次のようにテストを作成します。ここでは JUnit を想定していますが、一般的に、テスト フレームワークは自由に使用できます。GAE には関係ありません。

private ClientChannelService service;
private LocalServiceTestHelper helper = new LocalServiceTestHelper(
                                            new LocalChannelServiceTestConfig());
private ChannelManager channelManager;

@Before
public void setUp() {
    helper.setUp();
    channelManager = LocalChannelServiceTestConfig.getLocalChannelService()
                                                  .getChannelManager();
    service = new ClientChannelService();
}

@After
public void tearDown() {
    helper.tearDown();
}

@Test
public void testSendMessage() {
    String token = service.createToken();
    connectionId = channelManager.connectClient(token); //emulate client connection

    service.sendMessage(token, "message");

    String message = channelManager.getNextClientMessage(token, connectionId);
    assertEquals("message", message);
}
于 2013-11-22T14:57:35.567 に答える
0

http://code.google.com/p/googleappengine/source/browse/trunk/java/src/main/com/google/appengine/tools/development/testing/LocalChannelServiceTestConfig.java?r=の例を見ましたか? 182

おっと、以前の投稿で申し訳ありませんが、機能を実行していないことに気付きました...

于 2012-06-23T22:00:54.153 に答える