Nasıl benim için bir SQL dizesi oluşturmak için esqueleto alabilir miyim?
Nasıl from
ifadesinden bir SQL dizesi oluşturmak için esqueleto alabilir miyim?
toRawSql
belgelerine diyor ki, "sadece sorgu kalıcı günlüğü olabilir". Benim anlayabildiğim MonadLogger
tüm olası formları çalıştım, ama asla herhangi bir SQL basılmış. Aynı belgeleri de diyor ki "bu işlevi kullanarak el ile ... mümkün ama sıkıcı bir iştir". Ancak, bu tür, ne de herhangi bir fonksiyon türü, QueryType
değerler dönen yok kurucular verilir. QueryType
newtype
olduğunu fark ve unsafeCoerce
kullanarak bu geçici başardı!
Ayrıca SQL oluşturmak için bir veritabanına bağlanmak için gerek yok olsa bile Connection
bir SQLite üzerinden aldım) sağlamak zorunda kaldım.
Bu ne buldum. Daha iyi bir yolu olmalı.
withSqliteConn ":memory:" $
\conn -> return $ toRawSql SELECT
(unsafeCoerce ((const mempty)
:: a -> Text.Lazy.Builder.Builder))
(conn, initialIdentState) myFromStatement)
http://hackage.haskell.org/package/esqueleto-1.3.4.2/docs/Database-Esqueleto-Internal-Sql.html
CEVAP
Eğer RoboGuice ve birim testi için kurulum adımları ile ilgili bir sorun varsa, ne yazık ki, bu tür bir hata alabilirsiniz. Sihirli bir kısa cevap, ama oldukça tam takip adımlar bir dizi.
BTW, 1.1 - AbstractAndroidModule & RoboUnitTest artık RoboGuice 2.0 var RoboGuice kullanıyorsun. RoboGuice 1.1 önerilmiyor, en iyi genel çözüm yeni sürüm taşımaktır bu talimatları Upgrading to 2.0 göre.
Ancak, her ihtimale karşı RoboGuice bağlısın 1.1, burada bazı adımları takip etmek
- İnşa dosyaları değiştirerek paket isimleri yeniden düzenleme/sonra oluşturulan kodu/etc tutarsız yok. Oluşturulan kodu silin, Temiz Ve yeni bir proje Oluşturmak bile yeniden kopyalayın ve kaynak dosyaları.
- Bir proje uygulama kodunuzu (RoboGuice bağımlı, Gereçleri/RoboUnitTestCase/AndroidMock bağımsız). Uygulama kodu proje lib içinde vardır: guice-2.0-no_aop.jar ve roboguice-1.1.2.jar.
- Başka bir projede birim test kod başvurular (/bağımsız Gereçleri RoboGuice RoboUnitTestCase/AndroidMock bağımsız). Talimatları burada 20**. Test kodu projenizin lib içinde vardır: AndroidMockGenerator.jar.
Uygulama Projesi, Uygulama Modül derslerine şöyle bir şey:
package com.mypackage; import android.app.Instrumentation; import android.content.Context; public class MyApplication extends roboguice.application.RoboApplication { static MyModule myModule; // this constructor usually called by app public MyApplication(Context context) { super(); attachBaseContext(context); } // This constructor called by unit tests. This is unfortunately small amount of // 'abstraction leakage' of unit test needs into app code. public MyApplication(Instrumentation instrumentation) { super(); attachBaseContext(instrumentation.getContext()); } public static void setModule(MyModule module) { MyApplication.myModule = module; } public static MyModule getModule() { return MyApplication.myModule; } }
Ve
package com.mypackage; public class MyModule extends roboguice.config.AbstractAndroidModule { // this will be injected protected UsefulObject myUsefulInstance; public void setUsefulObject(UsefulObject usefulInstance) { this.myUsefulInstance = usefulInstance; } public UsefulObject getUsefulObject() { return this.myUsefulInstance; } @Override protected void configure() { bind(UsefulObject.class).toInstance(myUsefulInstance); }
}
Projesinin içinde test case sınıf şuna benzer:
import android.test.suitebuilder.annotation.LargeTest; import com.mypackage.MyApplication; import com.mypackage.MyModule; import com.mypackage.UsefulObject; //import com.mypackage.UsefulObjectSimpleImplementation; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; import com.google.android.testing.mocking.AndroidMock; import roboguice.test.RoboUnitTestCase; public class TestMyModule extends RoboUnitTestCase<MyApplication> { @Override protected void setUp() throws Exception { UsefulObject instance = // new UsefulObjectSimpleImplementation(); AndroidMock.createNiceMock(UsefulObject.class); MyModule mockModule = new MyModule(); mockModule.setUsefulObject(instance); MyApplication.setModule(mockModule); super.setUp(); } // Make sure you use one of the @*Test annotations AND begin // your testcase's name with "test" @MediumTest public void test01() { AndroidMock.expect(MyApplication.getModule().getUsefulObject(). simpleMethod()).andStubReturn("Hello!"); }
}
Test proje için, androidmanifest.xml dosyayı aşağıdaki giriş olduğundan emin olun:
<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.mypackage" android:label="Tests for com.mypackage"/>
- Test çalışan, emülatör başladı ve çalıştığından emin olmak, sağlıklı, farklı, basit bir çalışan tarafından "Hello World" uygulaması. ilk önce Bu başarılı olduğunda, daha sonra uygulamanızı çalıştırın. Son olarak, test projenizi çalıştırın.
Bundan sonra çalışması gerekir. İyi şanslar ve bana bildirin!
Nasıl MSBUİLD benim için MSDEPLOY çalı...
Nasıl ücretsiz sürümü için bir "anahta...
Nasıl bir dize dönüştürmek için yığın ...
Nasıl, asenkron yerine senkron AJAX is...
Nasıl gcc benim C çöker app bir stackt...