マネージドフォームコンテキストで作業する場合の興味深いbagoficha 1C

Habrに投稿したことはなく、ここでそのような興味深い機会が描かれました。



記事で説明されている問題:





私はすぐにバグを見つけることが好きで、バグは私を見つけたいと言っているに違いありません。 そして私の人生で13日が重要な役割を果たしています。



物語



だから、私は夕方(12月13日のすぐ外)に座って、重要なリリース4.0でお気に入りのxUnitFor1C製品の1つに取り組んでいます。



クライアントからサーバーへ、またはクライアントからサーバーへ、またはその逆に切り替えるときに、マネージアプリケーションモードでテストをテストします。



シンクライアント上でマネージアプリケーションモードでサーバーテストを使用する場合、1つの興味深い困難な動作のシナリオがあります。



テストカーネルコンテキストモジュール(コントロールフォーム)で、2つの同様のメソッドが作成されました:クライアントでテストメソッドを実行(sign&Client)およびサーバーでテストメソッドを実行(sign&Server)。

その目的は名前から明らかです。



通常、テストではUprFormメソッドを使用しました。クライアントでTestメソッドを実行して、UVテストをテストします。 管理されたフォームのコンテキストを介して。



すべて正常です。問題はありません。



しかし、クライアントからサーバーへの移行を確認する必要がありました。 クライアントでRun Testメソッドを使用するだけで十分であると判断し、より深いハッキングを行う時間であり、ServerメソッドでRun Test Testメソッドを呼び出しました。



特別なテストを作成し、シナリオに応じた動作を説明し、テスト内でThisFormを呼び出し、サーバーでテストメソッドを実行します。



私はTDD技術に従って作業しているため、テストは予想通りに落ちます。 テストが機能するように、コードで何を修正する必要があるかを考え始めています(TDDはそのように機能します)。



数分経つ、驚いたことに、私が呼び出したメソッドExecuteTestMethodOnServerはプライベートであることがわかります。 彼には輸出の兆候はありません!



同時に、私は彼に電話をかけることに成功し、彼は完全に満足しています。



1Cプラットフォームのバグの検索と確認



たくさんのスマートな本を読んで、多くのプログラミング言語を知っているので、私は自分の目を信じられません。私はプライベートメソッドをそのように呼び出すことができないことを理解しています。



最初にチェックし、正しい場所から正しいコードを呼び出します。 数分後、エラーがなかったと確信しました。実際、プライベートメソッドを呼び出していて、正常に動作していました。



また、クライアントメソッドでのテストメソッドの実行がパブリック/エクスポートメソッドであることも確認しました。








バグを検索する方法に従って、状況を可能な限り簡素化し、サードパーティの要因を除外しました。



別の外部処理を作成しました。 シンプルな管理可能なフォームが追加されました。

プライベートクライアントメソッドの呼び出しとプライベートサーバーメソッドの呼び出しの2つのコマンドを追加

このフォームに次のコードを追加しました。



&  () (""); ("  ");  &  () .(); //    !!  &  () ("");  &  () .(); //   ,   ("  "); 
      
      







最初に、最新バージョン8.3.7.1805(間違えなければ2015年12月10日にリリース)で同様の手動テストを実行しました。



私は動作を取得します:



その結果、8.3.7で明示的なバグが発生します。



さらに、バグを見つけるための同じ方法に従って、別のプラットフォーム1C 8.2.19で動作を確認します

動作はまったく同じです。



同じ問題である組み込み処理の動作を確認しました。



実際、バグの言い回しは、 サードパーティのコードがマネージドフォームのコンテキストを介してマネージドフォームのプライベートサーバーメソッドを呼び出すことができ、プライベートクライアントコードはこの方法では呼び出せないということです。








修辞的な問題







その結果、このバグは私の夕方になりました!



表示されたbagofichが気に入っていただければ幸いです。



エンコーダーを1Cで展開できるようになりました。書き込みなしでエクスポートできるようになり、すべてがエンコーダーなしで機能します。

Exportを書く時間を無駄にしないなら、どれだけのコードを手に入れることができますか! 全国規模では、時間の節約は何ですか?



しかし、もっと真剣に、私はこのエラーを修正するために1Cになりたいです。

伝道者1C PeterG 、あなたは何と言いますか?

APK(Automated Configuration Check)の製品に同様のバグのチェックを作成することも提案します。



PS必要に応じて、手動テストの処理を提供できます。



PPSバージョン4.0 xUnitFor1Cの新機能に興味がある人は、次の記事と新年の贈り物を待ってください!



Googleはそれと何をしなければなりませんか?
記事の写真を検索すると、PPPSは、Googleで「プライバシー違反」というフレーズを検索すると、Googleロゴの付いたすべての写真がほとんどであることを発見しました。 これはなぜでしょうか?



All Articles