The Leverkusen forward was the star of the show, scoring three times, but question marks appear after a sub-par showing by the Germans as the Poland-Ukraine tournament nears
Bayer Leverkusen forward Eren Derdiyok was the hero for the Swiss as he hit a hat-trick - with all three goals set up by club team-mate Tranquillo Barnetta. Stephan Lichtsteiner and Admir Mehmedi struck the other goals for the hosts, who impressed observers with some enterprising attacking play, albeit in a friendly setting.
Germany attempted to respond through efforts by Mats Hummels, Andre Schurrle and Marco Reus, but they were always on the back foot, giving Joachim Low plenty to think about ahead of their Group B matches against Portugal, Denmark and the Netherlands.
The early momentum belonged to Germans, who had little trouble keeping play concentrated inside the Switzerland half. However, for all their monopolisation of possession, any goal threat remained largely elusive, and with 21 minutes gone, the Swiss managed to draw first blood.
An enterprising run down the left flank by Barnetta saw him manufacture enough space to find club team-mate Derdiyok, who made no mistake.
Germany barely had time to lick their wounds before Switzerland hit them for a second, which came within two minutes of the restart.
The pair were at it again, Barnetta breaking free down the left once more to lift a perfectly-weighted cross towards Derdiyok, who was allowed to ghost in and plant into the back of the net.
The German defence was far from convincing for both goals, and Derdiyok could have completed his hat-trick within moments when he attacked the ball deep inside the box, but for the presence of Marc-Andre ter Stegen.
Joachim Low’s men were shell-shocked, but continued to struggle to fashion genuine chances in their attempts to play through the Swiss ranks. However, on the stroke of first-half injury time, they found a way back into the game through a more conventional route.
A teasing free-kick by Mesut Ozil was sent towards the far post, where Hummels was on hand to send in a header off the underside of the crossbar and give Germany hope for the second half.
However, their hopes of a comeback were dashed barely five minutes after the restart as Switzerland added a third, with the Leverkusen combination striking gold once more.
Barnetta’s set-piece from the left was played into the heart of the German penalty area, where Derdiyok rose highest to glance past Ter Stegen, and round off his personal treble.
However, that seemed to serve as the wake-up call that Germany so desperately needed. Mario Gotze appeared to have beaten Diego Benaglio after skipping past Steve von Bergen, but the Cesena centre-back recovered and did just enough to hack the ball off the line.
Reus went close with an audacious long-range lob that was lifted onto the roof of the net, before substitute Julian Draxler saw an effort deflected just off target.
Germany would eventually find a goal in the 65th minute after Schurrle took aim from 25 yards out. The motion on the strike completely fooled Benaglio who let it slip past him.
Switzerland would not be down for long though. Gokhan Inler guided a delightful ball into the path of Lichtsteiner, who flicked a header past the onrushing Ter Stegen to restore his side’s two goal cushion.
Germany hit back quickly, and brought their deficit back to within one with 18 minutes let to play. Draxler's initial effort from the left was parried by Ter Stegen, but Reus was first to the rebound.
Incredibly, Switzerland scored again in the 77th minute. A wonderfully-worked free-kick saw Gokhan Inler slip to Reto Ziegler on the overlap. His low drive rebounded off the post, but Mehmedi steadied himself to poke home the rebound.
Gelson Fernandes sent a late header off the woodwork, but it mattered little as Switzerland ran out winners in a thoroughly absorbing contest.
Germany complete their Euro 2012 preparations in five days’ time when they square off against Israel in Leipzig. Switzerland meanwhile, unable to qualify for the showpiece in Poland & Ukraine, face Romania in a friendly on Wednesday.