我们开始了一个新的项目推出了很多我们不那么熟悉的新技术,而我们没有大量的练习中的架构.换句话说,接口和服务类的东西,我们的"等等之间的相互作用由于内部和客户的反馈,重建是相当不稳定的,更是如此.虽然我一直在不断移动的规范沮丧,我认为这在一定程度上建立的东西,我们以前从来没有建的必要组成部分 - 如果我们只是坚持原来的设计和范围,最终产品可能会是比它成为一个创新和有用的要少得多.
我还介绍了测试驱动开发(TDD),因为它的好处已有详细记录,从概念上讲我喜欢这个想法.还有两个要学习的新东西--NUnit和嘲弄 - 但是看到所有那些绿色圆圈使得这一切都值得.
然而,随着时间的推移,那些不断变化的设计似乎意味着我花了很多时间来改变我的测试,而不是编写代码本身.仅仅因为这个原因,我已经回到了旧的测试方式 - 也就是说,不是自动化的.
虽然我毫不怀疑这个应用程序在数百个优秀的单元测试中会更加强大,但我发现推出该产品的时间权衡是不可接受的.我的问题是,那么 - 你们是否还发现如果你正在构建一个测试版/建立测试版,那么TDD会很麻烦?TDD是否更加自然地与规范更加固定的东西,或者开发人员在语言和技术方面拥有更多经验的东西相提并论?或者我做过一些根本错误的事情?
请注意,我并不想在这里批评TDD - 只是我不确定它总是最适合所有情况.
我正在使用Visual Studio测试项目,正在使用部署文件等修改测试配置(通过VS GUI),现在我需要为测试运行编写一个启动脚本.
我不清楚这些脚本使用的语言或文件类型或机制.需要提示.
com.android.support.test.espresso:espresso-contrib:2.2.1不推荐使用Espresso contrib()openDrawer方法
那怎么我打开一个抽屉?
android automated-tests open-source android-testing android-espresso
似乎有一些答案是那种,有点理智,但我不知道如何执行.我还没有找到一个全面的答案.
Google Test不应该是已安装的库,它应该与项目一起构建.(请参阅常见问题解答.)据我所知,这意味着Google Test库是我单元测试的依赖项,应该在我第一次在项目中运行"make check"时构建.这应该在某个目录中构建Google Test库.我不知道该怎么做.它提到了一些被弃用的autotools脚本,我不确定他们在谈论什么,或者如何正确地指出我的构建.
假设构建成功,我如何编写使用我的本地编译版Google Test运行测试的测试?我假设我在test目录中放了一堆Makefile.am命令.但他们是什么?什么是使用Google Test的单元测试的例子?
所以我使用了testcafe的默认docker,它在docker hub上是testcafe/testcafe,我必须运行一些testcafe脚本.
但是,我需要将错误触发的屏幕截图上传到我可以在docker镜像运行完毕后查看它的某个地方.
我正在使用使用bash的imgur程序,所以我重新做了一些事情,使它兼容并且一切正常,除了我需要卷曲.我试过跑步
apk add curl
Run Code Online (Sandbox Code Playgroud)
但是我收到了错误
ERROR: Unable to lock database: Permission denied ERROR: Failed to open apk database:
Run Code Online (Sandbox Code Playgroud)
现在我没有这意味着我没有权限这样做但是我可以解决这个问题,有一些方法可以成为root(这是在bitbucket管道中).
我真的不想创建自己的docker.
另请注意我发现的与此相关的所有问题都是关于在创建docker时安装,但我的问题是如何在创建docker之后执行此操作.thx(一个很好的答案是保存屏幕截图的另一种方法,但最好不用ssh).
当我按下“运行所有规格”按钮或使用运行赛普拉斯中所有文件的运行命令时,它会按字母顺序运行所有测试文件,所以我不想要那样。
我想用我自己的规则对它们进行排序。
假设我在聊天应用程序测试中有 3 个步骤。
我想测试每一步,而不是相互绑定。我的意思是,测试自己的功能之一。我做的是如下
chat_app_connect.spec.js
describe('Server Connecting Test', () => {
it('Visit Server page', () => {
cy.visit('https://chat.page..');
});
it('Check welcome messages', () => {
cy.contains('Live Support');
cy.contains('Hello, Stranger');
});
it('Check URL and status of circle', () => {
// URL
cy.url()
.should('include', '/hello');
// Status Circle
cy.get('circle')
.should('have.class', 'positive');
});
});
Run Code Online (Sandbox Code Playgroud)
chat_connect.spec.js
import './chat_app_connect.spec.js';
describe('Chat Connecting Test', () => {
it('Type customer name', () => {
cy.get('input')
.clear()
.type('E2E Test');
});
it('Click …Run Code Online (Sandbox Code Playgroud) 我尝试为我的 Android 应用程序(Java)实现一些单元和仪器测试,我的单元测试工作正常,但仪器测试失败:
@RunWith(AndroidJUnit4.class)
@LargeTest
public class ExampleInstrumentedTest {
@Rule
public IntentsTestRule<MainActivity> mActivityRule = new IntentsTestRule<>(MainActivity.class);
@Test
public void checkIfCategoriesIsNotEmpty() {
onView(withId(R.id.header_left_layout)).perform(click());
onView(withId(R.id.list_view)).check(new ViewAssertion() {
@Override
public void check(View view, NoMatchingViewException noViewFoundException) {
ListView list_categories = (ListView) view;
ListAdapter adapter = list_categories.getAdapter();
Assert.assertTrue(adapter.getCount() > 0);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试运行测试时出现此错误:
"Run Android instrumented tests using Gradle" option was ignored because this module type is not supported yet.
Run Code Online (Sandbox Code Playgroud)
我在 build.config 文件中的实现是:
// UNIT TEST
testImplementation 'junit:junit:4.12'
testImplementation 'org.hamcrest:java-hamcrest:2.0.0.0'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.7.1'
// …Run Code Online (Sandbox Code Playgroud) 我是一名高级工程师,在另外四人的团队中工作,他们使用自行开发的内容管理应用程序来驱动美国大型专业体育网站.大约两年前我们已经开始实施这个项目并选择Java作为我们的平台,尽管我的问题不是特定于Java的.自从我们开始以来,我们的队伍中出现了一些流失.尽管重要的决定是通过共识做出的,但我们每个人在决定实施细节方面都有很大的自由度.
我们是一个相对年轻的项目,但是当没有一个开发人员知道应用程序的所有内容时,我们已经到了这一点.其主要原因是我们快速的发展速度,其中大部分都发生在我们这项运动赛季揭幕战的紧张之中; 以及我们的测试覆盖率基本上为0的事实.
我们都理解TDD的理论上的好处,并且原则上同意如果我们多年来开始并坚持使用它,这种方法将改善我们的生活和代码质量.这从未成功,现在我们负责一个未经测试的代码库,这个代码库仍然需要大量扩展,并且在生产中被积极使用并且依赖于公司结构.
面对这种情况,我只看到两种可能的解决方案:(1)追溯性地为现有代码编写测试,或者(2)尽可能多地重写应用程序,同时狂热地遵守TDD原则.我认为(1)基本上不实用,因为我们在项目中有一个地狱般的依赖图.几乎没有一个组件可以单独测试; 我们不知道所有用例; 由于业务需求或对不可预见问题的反应,用例在测试过程中可能会发生变化.由于这些原因,我们无法确定我们的测试一旦完成就会变成高质量.有可能导致团队陷入虚假的安全感,微软的错误会在没有人注意的情况下蔓延.鉴于投资回报率的前景黯淡,我或我们的团队很难证明这种管理努力的合理性.
方法(2)更具吸引力,因为我们将遵循测试优先原则,从而产生几乎100%覆盖的代码.即使最初的努力最初导致覆盖码的岛屿,这将为我们提供在项目范围覆盖范围内的重要滩头阵地,并帮助解耦和隔离各种组件.
两种情况下的缺点是,我们团队的业务生产率可能会在任何测试推动期间显着减速或完全消失.我们无法承受在业务驱动的紧缩期间这样做,尽管它之后是相对平静的,我们可以为我们的目的利用.
除了选择正确的方法((1),(2)或其他未知解决方案之外),我需要帮助回答以下问题:我的团队如何确保我们的努力不会长期浪费通过无法维护的测试和/或在业务需求滚动时未能编写新的测试?我对此提出了广泛的建议,无论是胡萝卜还是胡萝卜.
无论如何,感谢阅读有关这种自我造成的困境.
简介:
我在这里看到很多关于软件测试和我不理解的其他术语的主题.
问题:
作为一名初学者,遗憾的是,我不知道软件测试是如何工作的,甚至不知道如何测试一个简单的函数.这是一种耻辱,但这就是事实.我也希望这个问题可以帮助其他初学者开发者.
问题:
你能帮助我更多地理解这个主题吗?
也许一些问题可以帮助:
如果可能的话,请发布一些带有示例的代码来阐明这些想法.
欢迎任何有关此主题的帮助!谢谢.
我正在扩展python 2.7 unittest框架来进行一些功能测试.我想做的一件事就是阻止所有测试在测试内部和setUpClass()方法内部运行.有时如果测试失败,程序就会破坏,不再有任何用处继续测试,所以我想阻止测试运行.
我注意到TestResult有一个shouldStop属性和一个stop()方法,但我不确定如何访问测试内部.
有没有人有任何想法?有没有更好的办法?
python testing automated-tests functional-testing python-unittest
automated-tests ×10
testing ×4
unit-testing ×4
android ×2
tdd ×2
alpine-linux ×1
autotools ×1
c++ ×1
cypress ×1
docker ×1
googletest ×1
java ×1
mstest ×1
nunit ×1
open-source ×1
python ×1
scala ×1
testcafe ×1