我有一个用Golang编写的简单程序。这是一个API。因此,在项目文件夹中,有一个名为@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_detect);
intent = getIntent();
imageBytes = intent.getByteArrayExtra("CapturedImage");
cameraWidth = intent.getIntExtra("width", 0);
cameraHeight = intent.getIntExtra("height", 0);
bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
bitmap = Bitmap.createScaledBitmap(bitmap, cameraWidth, cameraHeight, false);
image = FirebaseVisionImage.fromBitmap(bitmap);
detector = FirebaseVision.getInstance().getOnDeviceTextRecognizer();
result = detector.processImage(image)
.addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
@Override
public void onSuccess(FirebaseVisionText firebaseVisionText) {
String resultText = firebaseVisionText.getText();
Log.d("TEST", resultText);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
}
的文件夹,其中包含我的cmd
程序包(用于初始化应用程序并定义API的端点)。还有一个以我的程序命名的文件夹,其中包含来自一个也以我的程序命名的包中的多个文件。该程序包充当执行所有必要查询的模型,并包含我定义的所有类型。
我还创建了一个名为main
的文件夹。它在名为test
的程序包下包含我的所有测试文件。问题是要运行测试,我必须访问我的主程序包! Golang有办法做到这一点吗?我尝试仅使用test
,但当然不起作用。
我也有个主意。也许我可以将所有初始化函数(在import "cmd/main"
文件夹中)移动到以我的程序命名的包中。这样,我可以在cmd
中进行常规的import
。然后,我在test
包中的cmd
内创建了一个main.go
,作为编译器的入口点。
我是Go的新手,所以我不太自信。您认为这是正确的方法吗?
谢谢。
编辑:显然有人认为这个问题是重复的,但事实并非如此。这是我对评论的解释:
我在发布之前阅读了此信息,但没有回答我的问题 因为在那个帖子中,这个人的测试包在主程序包中。的 我问我的问题的原因是因为我不想拥有我的 在主程序包中进行测试。我宁愿将它们全部放在测试文件夹中 在同一包装内。
答案 0 :(得分:1)
您想做的事在GO中是不可能的(假设您要测试私有功能)。
因为我不想在主程序包中进行测试。我宁愿 将它们全部放在同一软件包内的测试文件夹中。
如果将代码移到其他文件夹中,则您的代码属于不同的软件包。
这就是GO定义软件包https://golang.org/doc/code.html#Organization的方式:
每个程序包均以单个形式包含一个或多个Go源文件。 目录。
这是您的代码结构:
main
| -- main.go (package main)
+ -- test
| -- main_test.go (package test)
习惯上将测试与代码保存在同一文件夹中。如果语言或框架设置了开发人员必须遵循的一些规则,这是正常的。 GO对此非常严格。
这是组织代码的方式:
main
| -- main.go (package main)
| -- main_test.go (package main_test)
| -- main_private_test.go (package main)
通常有必要针对其公共接口测试代码。最好的方法是将测试放入不同的程序包中。 GO约定是将测试保存在同一文件夹中,这导致使用相同的程序包名称。有针对该问题的解决方法。您可以在测试的程序包名称中添加_test
(程序包main_test)前缀。
如果无法使用公共接口测试您的代码,则可以添加另一个带有测试的文件,并在该文件中使用package main
。