diff --git a/libweave/src/notification/xmpp_channel_unittest.cc b/libweave/src/notification/xmpp_channel_unittest.cc
index 746543a..7fd6074 100644
--- a/libweave/src/notification/xmpp_channel_unittest.cc
+++ b/libweave/src/notification/xmpp_channel_unittest.cc
@@ -155,39 +155,37 @@
  protected:
   void SetUp() override {
     fake_loop_.SetAsCurrent();
-
-    xmpp_client_.reset(new FakeXmppChannel{});
     clock_.SetNow(base::Time::Now());
   }
 
   void StartStream() {
-    xmpp_client_->fake_stream_.ExpectWritePacketString({}, kStartStreamMessage);
-    xmpp_client_->fake_stream_.AddReadPacketString({}, kStartStreamResponse);
-    xmpp_client_->fake_stream_.ExpectWritePacketString({}, kStartTlsMessage);
-    xmpp_client_->Start(nullptr);
+    xmpp_client_.fake_stream_.ExpectWritePacketString({}, kStartStreamMessage);
+    xmpp_client_.fake_stream_.AddReadPacketString({}, kStartStreamResponse);
+    xmpp_client_.fake_stream_.ExpectWritePacketString({}, kStartTlsMessage);
+    xmpp_client_.Start(nullptr);
     RunUntil(XmppChannel::XmppState::kTlsStarted);
   }
 
   void StartWithState(XmppChannel::XmppState state) {
     StartStream();
-    xmpp_client_->set_state(state);
+    xmpp_client_.set_state(state);
   }
 
   void RunUntil(XmppChannel::XmppState st) {
-    for (size_t n = 15; n && xmpp_client_->state() != st; --n)
+    for (size_t n = 15; n && xmpp_client_.state() != st; --n)
       fake_loop_.RunOnce(true);
-    EXPECT_EQ(st, xmpp_client_->state());
+    EXPECT_EQ(st, xmpp_client_.state());
   }
 
-  std::unique_ptr<FakeXmppChannel> xmpp_client_;
   base::SimpleTestClock clock_;
   chromeos::FakeMessageLoop fake_loop_{&clock_};
+  FakeXmppChannel xmpp_client_;
 };
 
 TEST_F(XmppChannelTest, StartStream) {
-  EXPECT_EQ(XmppChannel::XmppState::kNotStarted, xmpp_client_->state());
-  xmpp_client_->fake_stream_.ExpectWritePacketString({}, kStartStreamMessage);
-  xmpp_client_->Start(nullptr);
+  EXPECT_EQ(XmppChannel::XmppState::kNotStarted, xmpp_client_.state());
+  xmpp_client_.fake_stream_.ExpectWritePacketString({}, kStartStreamMessage);
+  xmpp_client_.Start(nullptr);
   RunUntil(XmppChannel::XmppState::kConnected);
 }
 
@@ -197,47 +195,46 @@
 
 TEST_F(XmppChannelTest, HandleTLSCompleted) {
   StartWithState(XmppChannel::XmppState::kTlsCompleted);
-  xmpp_client_->fake_stream_.AddReadPacketString({}, kTlsStreamResponse);
-  xmpp_client_->fake_stream_.ExpectWritePacketString({},
-                                                     kAuthenticationMessage);
+  xmpp_client_.fake_stream_.AddReadPacketString({}, kTlsStreamResponse);
+  xmpp_client_.fake_stream_.ExpectWritePacketString({}, kAuthenticationMessage);
   RunUntil(XmppChannel::XmppState::kAuthenticationStarted);
 }
 
 TEST_F(XmppChannelTest, HandleAuthenticationSucceededResponse) {
   StartWithState(XmppChannel::XmppState::kAuthenticationStarted);
-  xmpp_client_->fake_stream_.AddReadPacketString(
+  xmpp_client_.fake_stream_.AddReadPacketString(
       {}, kAuthenticationSucceededResponse);
-  xmpp_client_->fake_stream_.ExpectWritePacketString({}, kStartStreamMessage);
+  xmpp_client_.fake_stream_.ExpectWritePacketString({}, kStartStreamMessage);
   RunUntil(XmppChannel::XmppState::kStreamRestartedPostAuthentication);
 }
 
 TEST_F(XmppChannelTest, HandleAuthenticationFailedResponse) {
   StartWithState(XmppChannel::XmppState::kAuthenticationStarted);
-  xmpp_client_->fake_stream_.AddReadPacketString({},
-                                                 kAuthenticationFailedResponse);
+  xmpp_client_.fake_stream_.AddReadPacketString({},
+                                                kAuthenticationFailedResponse);
   RunUntil(XmppChannel::XmppState::kAuthenticationFailed);
 }
 
 TEST_F(XmppChannelTest, HandleStreamRestartedResponse) {
   StartWithState(XmppChannel::XmppState::kStreamRestartedPostAuthentication);
-  xmpp_client_->fake_stream_.AddReadPacketString({}, kRestartStreamResponse);
-  xmpp_client_->fake_stream_.ExpectWritePacketString({}, kBindMessage);
+  xmpp_client_.fake_stream_.AddReadPacketString({}, kRestartStreamResponse);
+  xmpp_client_.fake_stream_.ExpectWritePacketString({}, kBindMessage);
   RunUntil(XmppChannel::XmppState::kBindSent);
-  EXPECT_TRUE(xmpp_client_->jid().empty());
+  EXPECT_TRUE(xmpp_client_.jid().empty());
 
-  xmpp_client_->fake_stream_.AddReadPacketString({}, kBindResponse);
-  xmpp_client_->fake_stream_.ExpectWritePacketString({}, kSessionMessage);
+  xmpp_client_.fake_stream_.AddReadPacketString({}, kBindResponse);
+  xmpp_client_.fake_stream_.ExpectWritePacketString({}, kSessionMessage);
   RunUntil(XmppChannel::XmppState::kSessionStarted);
   EXPECT_EQ(
       "110cc78f78d7032cc7bf2c6e14c1fa7d@clouddevices.gserviceaccount.com"
       "/19853128",
-      xmpp_client_->jid());
+      xmpp_client_.jid());
 
-  xmpp_client_->fake_stream_.AddReadPacketString({}, kSessionResponse);
-  xmpp_client_->fake_stream_.ExpectWritePacketString({}, kSubscribeMessage);
+  xmpp_client_.fake_stream_.AddReadPacketString({}, kSessionResponse);
+  xmpp_client_.fake_stream_.ExpectWritePacketString({}, kSubscribeMessage);
   RunUntil(XmppChannel::XmppState::kSubscribeStarted);
 
-  xmpp_client_->fake_stream_.AddReadPacketString({}, kSubscribedResponse);
+  xmpp_client_.fake_stream_.AddReadPacketString({}, kSubscribedResponse);
   RunUntil(XmppChannel::XmppState::kSubscribed);
 }
 
diff --git a/libweave/src/notification/xmpp_iq_stanza_handler_unittest.cc b/libweave/src/notification/xmpp_iq_stanza_handler_unittest.cc
index 29ac5af..a1d1f6f 100644
--- a/libweave/src/notification/xmpp_iq_stanza_handler_unittest.cc
+++ b/libweave/src/notification/xmpp_iq_stanza_handler_unittest.cc
@@ -77,37 +77,35 @@
  public:
   void SetUp() override {
     mock_loop_.SetAsCurrent();
-    iq_stanza_handler_.reset(
-        new IqStanzaHandler{&mock_xmpp_channel_});
   }
 
   testing::StrictMock<MockXmppChannelInterface> mock_xmpp_channel_;
   base::SimpleTestClock clock_;
   testing::NiceMock<chromeos::MockMessageLoop> mock_loop_{&clock_};
-  std::unique_ptr<IqStanzaHandler> iq_stanza_handler_;
+  IqStanzaHandler iq_stanza_handler_{&mock_xmpp_channel_};
   MockResponseReceiver receiver_;
 };
 
 TEST_F(IqStanzaHandlerTest, SendRequest) {
   std::string expected_msg = "<iq id='1' type='set'><body/></iq>";
   EXPECT_CALL(mock_xmpp_channel_, SendMessage(expected_msg)).Times(1);
-  iq_stanza_handler_->SendRequest("set", "", "", "<body/>", {}, {});
+  iq_stanza_handler_.SendRequest("set", "", "", "<body/>", {}, {});
 
   expected_msg = "<iq id='2' type='get'><body/></iq>";
   EXPECT_CALL(mock_xmpp_channel_, SendMessage(expected_msg)).Times(1);
-  iq_stanza_handler_->SendRequest("get", "", "", "<body/>", {}, {});
+  iq_stanza_handler_.SendRequest("get", "", "", "<body/>", {}, {});
 
   expected_msg = "<iq id='3' type='query' from='foo@bar'><body/></iq>";
   EXPECT_CALL(mock_xmpp_channel_, SendMessage(expected_msg)).Times(1);
-  iq_stanza_handler_->SendRequest("query", "foo@bar", "", "<body/>", {}, {});
+  iq_stanza_handler_.SendRequest("query", "foo@bar", "", "<body/>", {}, {});
 
   expected_msg = "<iq id='4' type='query' to='foo@bar'><body/></iq>";
   EXPECT_CALL(mock_xmpp_channel_, SendMessage(expected_msg)).Times(1);
-  iq_stanza_handler_->SendRequest("query", "", "foo@bar", "<body/>", {}, {});
+  iq_stanza_handler_.SendRequest("query", "", "foo@bar", "<body/>", {}, {});
 
   expected_msg = "<iq id='5' type='query' from='foo@bar' to='baz'><body/></iq>";
   EXPECT_CALL(mock_xmpp_channel_, SendMessage(expected_msg)).Times(1);
-  iq_stanza_handler_->SendRequest("query", "foo@bar", "baz", "<body/>", {}, {});
+  iq_stanza_handler_.SendRequest("query", "foo@bar", "baz", "<body/>", {}, {});
 
   // This test ignores all the posted callbacks.
 }
@@ -120,13 +118,13 @@
       "</error></iq>";
   EXPECT_CALL(mock_xmpp_channel_, SendMessage(expected_msg)).Times(1);
   auto request = XmlParser{}.Parse("<iq id='1' type='set'><foo/></iq>");
-  EXPECT_TRUE(iq_stanza_handler_->HandleIqStanza(std::move(request)));
+  EXPECT_TRUE(iq_stanza_handler_.HandleIqStanza(std::move(request)));
 }
 
 TEST_F(IqStanzaHandlerTest, UnknownResponseId) {
   // No requests with ID=100 have been previously sent.
   auto request = XmlParser{}.Parse("<iq id='100' type='result'><foo/></iq>");
-  EXPECT_TRUE(iq_stanza_handler_->HandleIqStanza(std::move(request)));
+  EXPECT_TRUE(iq_stanza_handler_.HandleIqStanza(std::move(request)));
 }
 
 TEST_F(IqStanzaHandlerTest, SequentialResponses) {
@@ -134,21 +132,21 @@
       .Times(2);
 
   EXPECT_CALL(mock_xmpp_channel_, SendMessage(_)).Times(2);
-  iq_stanza_handler_->SendRequest("set", "", "", "<body/>",
-                                  receiver_.callback(1), {});
-  iq_stanza_handler_->SendRequest("get", "", "", "<body/>",
-                                  receiver_.callback(2), {});
+  iq_stanza_handler_.SendRequest("set", "", "", "<body/>",
+                                 receiver_.callback(1), {});
+  iq_stanza_handler_.SendRequest("get", "", "", "<body/>",
+                                 receiver_.callback(2), {});
 
   EXPECT_CALL(mock_loop_, PostDelayedTask(_, _, _))
       .Times(2);
 
   EXPECT_CALL(receiver_, OnResponse(1, "foo"));
   auto request = XmlParser{}.Parse("<iq id='1' type='result'><foo/></iq>");
-  EXPECT_TRUE(iq_stanza_handler_->HandleIqStanza(std::move(request)));
+  EXPECT_TRUE(iq_stanza_handler_.HandleIqStanza(std::move(request)));
 
   EXPECT_CALL(receiver_, OnResponse(2, "bar"));
   request = XmlParser{}.Parse("<iq id='2' type='result'><bar/></iq>");
-  EXPECT_TRUE(iq_stanza_handler_->HandleIqStanza(std::move(request)));
+  EXPECT_TRUE(iq_stanza_handler_.HandleIqStanza(std::move(request)));
 
   mock_loop_.Run();
 }
@@ -158,21 +156,21 @@
       .Times(2);
 
   EXPECT_CALL(mock_xmpp_channel_, SendMessage(_)).Times(2);
-  iq_stanza_handler_->SendRequest("set", "", "", "<body/>",
-                                  receiver_.callback(1), {});
-  iq_stanza_handler_->SendRequest("get", "", "", "<body/>",
-                                  receiver_.callback(2), {});
+  iq_stanza_handler_.SendRequest("set", "", "", "<body/>",
+                                 receiver_.callback(1), {});
+  iq_stanza_handler_.SendRequest("get", "", "", "<body/>",
+                                 receiver_.callback(2), {});
 
   EXPECT_CALL(mock_loop_, PostDelayedTask(_, _, _))
       .Times(2);
 
   EXPECT_CALL(receiver_, OnResponse(2, "bar"));
   auto request = XmlParser{}.Parse("<iq id='2' type='result'><bar/></iq>");
-  EXPECT_TRUE(iq_stanza_handler_->HandleIqStanza(std::move(request)));
+  EXPECT_TRUE(iq_stanza_handler_.HandleIqStanza(std::move(request)));
 
   EXPECT_CALL(receiver_, OnResponse(1, "foo"));
   request = XmlParser{}.Parse("<iq id='1' type='result'><foo/></iq>");
-  EXPECT_TRUE(iq_stanza_handler_->HandleIqStanza(std::move(request)));
+  EXPECT_TRUE(iq_stanza_handler_.HandleIqStanza(std::move(request)));
 
   mock_loop_.Run();
 }
@@ -186,8 +184,8 @@
 
   EXPECT_CALL(mock_xmpp_channel_, SendMessage(_)).Times(1);
   EXPECT_FALSE(called);
-  iq_stanza_handler_->SendRequest("set", "", "", "<body/>", {},
-                                  base::Bind(on_timeout));
+  iq_stanza_handler_.SendRequest("set", "", "", "<body/>", {},
+                                 base::Bind(on_timeout));
   mock_loop_.Run();
   EXPECT_TRUE(called);
 }
